正则表达式语法问题

时间:2011-06-13 16:15:51

标签: php regex

$pattern='`<a\s+[^>]*(href=([\'\"]).*\\2)[^>]*>([^<]*)</a>`isU';

我想更改([^<]*)这个来搜索</a>,不仅<因为<img>标记可能在<a>标记内。

任何人都可以帮忙,我在正则表达式上很糟糕。

3 个答案:

答案 0 :(得分:2)

您可以使用PHP解析器执行此操作。我根本不会使用正则表达式。

您可以尝试: http://simplehtmldom.sourceforge.net/

虽然我认为PHP内置了一个DOM解析器。

答案 1 :(得分:1)

([^<]*)更改为不匹配的所有(.*?)匹配可能会解决问题

答案 2 :(得分:0)

([^<]*)可以更改为((?:[^<]|<(?!/a>))*),其使用否定前瞻来匹配非<个字符或<个字符,而这些字符后面没有/a> 。在行动here中查看。

HOWEVER ,正如已经多次说过的那样,这不是解析HTML的好方法。首先,它的效率非常低,其次,如果你有嵌套标签会发生什么,例如<a><a></a></a>?虽然超链接可能不会发生这种情况,但它在许多其他HTML元素中很常见。