Php 使用正则表达式排除以片段URL开头的锚定标记

Php 使用正则表达式排除以片段URL开头的锚定标记,php,regex,Php,Regex,我们正在使用的WordPress插件之一是依靠正则表达式来检测HTML中的锚标记。代码如下: $regexp=“]*href=(\”?)([^\“>]*?)\\1[^>]*>(.*); preg_match_all(“/$regexp/siU”,$string,$matchArray); 这将导致$matchArray填充所有锚定标记,包括那些在href属性中仅包含片段URL的锚定标记(例如:href=“#这是一个id”或href=“#”不应匹配) 我们正在尝试更新正则表达式以忽略带有片段UR

我们正在使用的WordPress插件之一是依靠正则表达式来检测HTML中的锚标记。代码如下:

$regexp=“]*href=(\”?)([^\“>]*?)\\1[^>]*>(.*);
preg_match_all(“/$regexp/siU”,$string,$matchArray);
这将导致
$matchArray
填充所有锚定标记,包括那些在
href
属性中仅包含片段URL的锚定标记(例如:
href=“#这是一个id”
href=“#”
不应匹配)

我们正在尝试更新正则表达式以忽略带有片段URL的锚定标记。我尝试了下面的正则表达式,但似乎有效。Regex不是我的强项,我在寻找正确方向上的有用指导

$regexp=“]*href=(\“[^\”>]*?)([^\”>]*?)\\1[^>]*>(*);

备注:我们的目标是修复此问题,并向原始插件作者提交一份PR,以使其得到纠正。

如果您只是试图忽略以
#
开头的URL,您可以使用以下方法:

$regexp = "<a\s[^>]*href=(\"??)([^#\"][^\" >]*?)\\1[^>]*>(.*)<\/a>"
$regexp=”