Php 从包含html和javascript的字符串中提取链接

Php 从包含html和javascript的字符串中提取链接,php,html,Php,Html,我有一个包含以下内容的字符串: <img data-bind="defaultSrc: {srcDesktop: 'http://desktoplink', srcMobile: 'http://mobilelink', fallback: 'http://baseurl'}" > 如果可以将代码更改为下面的代码(添加了一些“-符号),则可以使用DOMDocument和json_decode获取此值: $string=”“; $doc=新的DOMDocument(); $doc->

我有一个包含以下内容的字符串:

<img data-bind="defaultSrc: {srcDesktop: 'http://desktoplink', srcMobile: 'http://mobilelink', fallback: 'http://baseurl'}" >

如果可以将代码更改为下面的代码(添加了一些“-符号),则可以使用DOMDocument和json_decode获取此值:

$string=”“;
$doc=新的DOMDocument();
$doc->loadHTML($string);
$data=str_replace(“\”,$doc->getElementsByTagName('img')[0]->getAttribute('data-bind');
$json=json_解码('{.$data'.}');
var_dump($json->defaultSrc->srcDesktop);

如果可以将代码更改为以下代码(添加了一些“-符号),则可以使用DOMDocument和json_decode获取此值:

$string=”“;
$doc=新的DOMDocument();
$doc->loadHTML($string);
$data=str_replace(“\”,$doc->getElementsByTagName('img')[0]->getAttribute('data-bind');
$json=json_解码('{.$data'.}');
var_dump($json->defaultSrc->srcDesktop);
您可以使用preg\u match

$string = '<img data-bind="defaultSrc: {srcDesktop: \'http://desktoplink\', srcMobile: \'http://mobilelink\', fallback: \'http://baseurl\'}" >';

preg_match('/.*\bsrcDesktop:\s*(?:\'|\")(.*?)(?:\'|\").*/i', $string, $matches);

if (isset($matches[1])) {
    echo trim($matches[1]);
}
$string='';
preg\u match('/.*\bsrcDesktop:\s*(?:\'\\'\\”)(.*?(:\'\'\”).*/i',$string,$matches);
if(isset($matches[1])){
回声微调($matches[1]);
}
您可以使用preg\u match

$string = '<img data-bind="defaultSrc: {srcDesktop: \'http://desktoplink\', srcMobile: \'http://mobilelink\', fallback: \'http://baseurl\'}" >';

preg_match('/.*\bsrcDesktop:\s*(?:\'|\")(.*?)(?:\'|\").*/i', $string, $matches);

if (isset($matches[1])) {
    echo trim($matches[1]);
}
$string='';
preg\u match('/.*\bsrcDesktop:\s*(?:\'\\'\\”)(.*?(:\'\'\”).*/i',$string,$matches);
if(isset($matches[1])){
回声微调($matches[1]);
}

您的字符串无效;它会读到,
“@黑曜石我会修复..刚刚注意到that@shnisaka我已更新了我的答案。添加了不区分大小写的“I”修改器和\b以确定srcDesktop左单词边界。您的字符串无效;它将读取
“@obsidiange I will fix。。刚刚注意到that@shnisaka我已经更新了我的答案。添加了不区分大小写的“i”修改器和\b以确定srcDesktop左单词边界。注意:尝试在test.php的第7行获取非对象的属性NULL@shnisaka我的错。修好了。我错过了srcMobile和fallback中缺少的报价。您是否可以选择添加它们?我从您的代码中构建json兼容语法。。。如果保存一个json字符串,而不是一个看起来有点像json的字符串,那就更好了。那就简单一点;)您的代码正在运行。谢谢你的贡献。。我现在使用的方法是拉得更快。但我愿意看到其他想法。您的系统更有条理,只需很少的改动就可以拉取您想要的任何内容。@shnisaka是的。而且更难(更安全)。如果有更多的空格,或者srcDesktop不是第一个注意到的键,它也会工作。如果url包含逗号,代码中会发生什么?(在URL中有效)您可能正在以您选择的方式更改URL。注意:在第7行的test.php中尝试获取非对象的属性NULL@shnisaka我的错。修好了。我错过了srcMobile和fallback中缺少的报价。您是否可以选择添加它们?我从您的代码中构建json兼容语法。。。如果保存一个json字符串,而不是一个看起来有点像json的字符串,那就更好了。那就简单一点;)您的代码正在运行。谢谢你的贡献。。我现在使用的方法是拉得更快。但我愿意看到其他想法。您的系统更有条理,只需很少的改动就可以拉取您想要的任何内容。@shnisaka是的。而且更难(更安全)。如果有更多的空格,或者srcDesktop不是第一个注意到的键,它也会工作。如果url包含逗号,代码中会发生什么?(在URL中有效)您可能正在以您选择的方式更改URL。等等
$string = '<img data-bind="defaultSrc: {srcDesktop: \'http://desktoplink\', srcMobile: \'http://mobilelink\', fallback: \'http://baseurl\'}" >';

preg_match('/.*\bsrcDesktop:\s*(?:\'|\")(.*?)(?:\'|\").*/i', $string, $matches);

if (isset($matches[1])) {
    echo trim($matches[1]);
}