我正在从一个网站中提取一些图像URL。为此,我使用以下正则表达式:
preg_match_all('#"(http.*?jpg)"#', $html, $matches);
然而,这将在这样的线路上给出错误的结果:
<a href="http://omg.com/test.html"><img src="http://omg.com/image.jpg"></a>
我无法搜索<img
标签,因为有些图像来自javascript。
但可以肯定的是,所有的图像都被两个""
包围
因此,解决我的问题的方法是更改regex,使其不允许在"http"answers"jpg"之间有任何"
字符
伪代码中有类似的内容
preg_match_all('#"(http.?:(anything except ")?jpg)"#', $html, $matches);
你是怎么做到的?
您可以在正则表达式中使用否定来确保http
和jpg
:之间不匹配"
preg_match_all('#"(http[^"]*jpg)"#i', $html, $matches);
Regex演示
需要注意的是,使用正则表达式解析HTML并不是废弃网页的最佳方式。您可以考虑使用DOM
解析器。
您可以尝试以下使用否定字符类的正则表达式。
"(http[^<>]*jpg)"
演示
[^<>]*
这确保在http
和jpg
字符串之间不存在<
或>
符号。