具有重复html内容的preg_match

时间:2012-10-16 00:22:57

标签: php regex preg-match

  

可能重复:
  RegEx match open tags except XHTML self-contained tags

我想从外部网站获取一些数据。 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。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

The pony he comes...

使用解析器,例如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");
}

答案 1 :(得分:0)

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

试试这个:

preg_match_all('#src="(.*?)"#',$htmlstring,$matches);
print_r($matches[1]); //the array you want