我从网站上提取了一些图片网址。 为此,我使用了这个正则表达式:
preg_match_all('#"(http.*?jpg)"#', $html, $matches);
然而,这会在这样的行上产生错误的结果:
<a href="http://omg.com/test.html"><img src="http://omg.com/image.jpg"></a>
我无法搜索<img
代码,因为有些图片来自javascript。
但可以肯定的是,所有图像都被两个""
那么解决我的问题的方法是将我的正则表达式更改为不允许在&#34; http&#34;之间使用任何"
个字符。和&#34; jpg&#34;
伪代码
中有类似的东西preg_match_all('#"(http.?:(anything except ")?jpg)"#', $html, $matches);
你是怎么做到的?
答案 0 :(得分:4)
您可以在正则表达式中使用否定,以确保在"
和http
之间不匹配jpg
:
preg_match_all('#"(http[^"]*jpg)"#i', $html, $matches);
<强> Regex Demo 强>
虽然使用正则表达式解析HTML并不是废弃网页的最佳方法,但要谨慎。您可以考虑使用DOM
解析器。
答案 1 :(得分:2)