正则表达式语法问题


Regular expression syntax problem

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

我想将([^<]*)更改为搜索</a>,而不仅仅是<,因为<img>标签可能在<a>标签内。

有人能帮忙吗?我不擅长正则表达式。

您可以使用PHP解析器来完成此操作。我根本不会用Regex。

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

尽管我认为PHP有一个内置的DOM解析器。

([^<]*)更改为不规则匹配的所有(.*?)可能会起到的作用

([^<]*)可以更改为((?:[^<]|<(?!/a>))*),它使用负前瞻来匹配非<字符或后面没有/a><字符。请在此处查看它的实际操作。

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