1

可能重复:
正则表达式匹配打开的标签,XHTML 自包含标签除外

我想你从外部网站提取一些数据。html 字符串看起来像这样(img 标签之间没有空格/换行符):

<img class="car-type231" src="/2f36b523259e9871bfade01983c9cc91.png" title="toyota"/>
<img class="car-type211" src="/0abc9b3ae3ba4bbcb6d3593fad6c1450.png" title="nissan"/>
<img class="car-type311" src="/4528e30bb510b4289121b4c70cb48ea3.png" title="bmw"/>
<img class="car-type332" src="/64575fee55553623896c7fd587a33ac3.png" title="mercedes"/>
<img class="car-type544" src="/a4f32dd95976d76704795c471c9a08b8.png" title="audi"/>
etc...

我想提取每个 src 路径并创建一个如下所示的数组:

$matches[0] = '/2f36b523259e9871bfade01983c9cc91.png';
$matches[1] = '/0abc9b3ae3ba4bbcb6d3593fad6c1450.png';
etc...

我尝试将 preg_match 与此参数一起使用:'#src="(.*?)"#'但它不起作用,因为它返回了所有 html。

任何帮助,将不胜感激!

4

2 回答 2

4

他来的小马...

使用解析器,例如 DOMDocument:

$dom = new DOMDocument();
$dom->loadHTML($html);
$imgs = $dom->getElementsByTagName('img');
$l = $imgs->length;
$srcs = []; // Array() in earlier versions of PHP
for( $i=0; $i<$l; $i++) {
    $srcs[$i] = $imgs->item($i)->getAttribute("src");
}
于 2012-10-16T00:27:46.737 回答
0

你会因为尝试使用 RegEx 而不是使用正确的文档/HTML 解析器来提取这些东西而感到非常痛苦,但我个人认为在这种情况下使用 RegEx 没有问题,因为 HTML 是如此简单 - 而你的目标是也很简单。

试试这个:

preg_match_all('#src="(.*?)"#',$htmlstring,$matches);
print_r($matches[1]); //the array you want
于 2012-10-16T00:46:35.923 回答