$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元素中很常见。