PHP preg_replace_callback匹配字符串,但不包括网址



我想做的是找到内容块中的所有匹配项,但忽略标签内的任何内容,以便在 preg_replace_callback(( 中使用。

例如:

test
<a href="test.com">test title</a>
test

在这种情况下,我希望第一行匹配,第三行匹配,但不是网址匹配,也不是 a 标签之间的标题匹配。

我有一个我觉得很接近的正则表达式:

#(?!<.*?)(btestb)(?![^<>]*?>)#si

(这将与网址部分不匹配(

但是如何修改正则表达式以排除 a 和/a 之间的"测试"呢?

如果它总是相同的模式,你可以使用 [A-Z] 或像 [A-Za-z] 这样的组合

我最终自己解决了它。这个正则表达式模式将做我想要的:

#(?!<a[^>]*?>)(btestb)(?![^<]*?</a>)#si

最新更新