【发布时间】:2011-10-02 20:07:33
【问题描述】:
我一直在为这个正则表达式苦苦挣扎,但我找不到任何解决方法。我使用基于 javascript 的工具来测试和编写表达式。放入php页面与preg匹配,结果不一样。
/(<img\b src=)"([^"]+)"(.* class=".*colorme(?:.|[^"]*)"[^>]+>)/
而且要测试的例子都在这里,第一个不应该匹配。这一切都适用于 javascript,但不适用于 php,只有类 class="colorme" 将被匹配。我错过了什么吗?
<img src="http://test.jpg" class="then" border="0" width="123" height="83">
<img src="test.jpg" border="0" alt="well watch picture" alt="tersts" class="really colorme" width="228" height="138">
<img src="test.jpeg" class="colorme then" border="0" width="123" height="83">
<img src="test" border="0" width="123" height="83" class="pic colorme then" with="me">
<img src="tests" border="0" class="colorme" width="123" height="83">
【问题讨论】:
-
使用正则表达式查找 HTML 元素(这种复杂性):坏主意。使用 HTML 解析器和 XPath!即使在 JavaScript 中,您也可以利用 DOM。
-
JavaScript 和 PHP 有不同的正则表达式变体。 (有 很多 种不同的正则表达式变体。)因此,它在 JavaScript 中工作,在 PHP 中不工作也就不足为奇了——语法(略有)不同。另外,由于 HTML 不是常规语言,因此您不能单独使用正则表达式来可靠地处理它。您可以接近,也许您可以使您正在尝试做的事情足够好地用于特定于您正在解决的问题的有限用例,但要小心。
-
我可以推荐正则表达式好友:regexbuddy.com - 它可以帮助您识别和测试正确的表达式以及何时准备就绪 - 您可以看到适合您所选语言的正确表达式。
标签: php javascript regex