我们使用的WordPress插件之一是依靠regex来检测HTML中的锚标记。代码如下:
$regexp = "<as[^>]*href=("??)([^" >]*?)\1[^>]*>(.*)</a>";
preg_match_all("/$regexp/siU", $string, $matchArray);
这导致$matchArray
填充有所有锚标签,包括在href
属性中仅具有片段URL的锚标签(例如:href="#this-is-an-id"
或href="#"
不应匹配(。
我们正在尝试更新regex,以忽略带有片段URL的锚点标记。我尝试了以下正则表达式,但它似乎有效。Regex不是我的强项,我希望在正确的方向上寻求任何有用的指导。
$regexp = "<as[^>]*href=("[^#.*]??)([^" >]*?)\1[^>]*>(.*)</a>";
附言:我们的目标是解决这个问题,并向原始插件作者提交一份PR,这样它就会得到纠正。
如果你只是想忽略以#
开头的URL,你可以使用这个:
$regexp = "<as[^>]*href=("??)([^#"][^" >]*?)\1[^>]*>(.*)</a>"
演示