Php preg_匹配模式,其中一个特定字符不应位于另一个字符之前

Php preg_匹配模式,其中一个特定字符不应位于另一个字符之前,php,regex,Php,Regex,我正在从网站中提取一些图像URL。 为此,我使用这个正则表达式: preg_match_all('#"(http.*?jpg)"#', $html, $matches); 但是,这将在以下行中给出错误的结果: <a href="http://omg.com/test.html"><img src="http://omg.com/image.jpg"></a> 您是如何做到这一点的?您可以尝试下面的正则表达式,它使用一个否定字符类 "(http[^<&

我正在从网站中提取一些图像URL。 为此,我使用这个正则表达式:

preg_match_all('#"(http.*?jpg)"#', $html, $matches);
但是,这将在以下行中给出错误的结果:

<a href="http://omg.com/test.html"><img src="http://omg.com/image.jpg"></a>

您是如何做到这一点的?

您可以尝试下面的正则表达式,它使用一个否定字符类

"(http[^<>]*jpg)"

[^]*这确保了http和jpg字符串之间不存在符号。

您可以尝试下面的正则表达式,该正则表达式使用否定字符类

"(http[^<>]*jpg)"

[^]*这确保http和jpg字符串之间不存在符号。

您可以在正则表达式中使用否定,以确保http和jpg之间不匹配:


作为警告,使用正则表达式解析HTML并不是丢弃网页的最佳方法。您可以考虑使用DOM解析器。

< P>您可以在正则表达式中使用否定,以确保HTTP和JPG之间不匹配:


作为警告,使用正则表达式解析HTML并不是丢弃网页的最佳方法。您可以考虑使用DOM解析器。

不认为我可以使用任何已完成的DOM解析器,很多图像来自没有标记的JavaScript,只包含在SoalSook内部的图像,没有问题,只是一个建议。我的正则表达式应该适用于你。+1但你不需要惰性修饰符-在这种情况下,它只会让事情稍微慢一点。谢谢,是的,它不是真的需要。现在更正。我不认为我可以使用任何已完成的dom解析器,很多图像来自javascript,并没有标记,只有封装在函数内部的图像,并没有问题,这只是一个建议。我的正则表达式应该适用于你。+1但你不需要惰性修饰符-在这种情况下,它只会让事情稍微慢一点。谢谢,是的,它不是真的需要。现在更正。
preg_match_all('#"(http[^"]*jpg)"#i', $html, $matches);