可能重复:
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。
任何帮助将不胜感激!
答案 0 :(得分: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");
}
答案 1 :(得分:0)
尝试使用RegEx而不是使用正确的文档/ HTML解析器来解决这些问题会让你感到非常悲痛,但我个人认为在这种情况下使用RegEx没有问题,因为HTML非常简单 - 而且你的目标也很简单。
试试这个:
preg_match_all('#src="(.*?)"#',$htmlstring,$matches);
print_r($matches[1]); //the array you want