PHP preg_replace_callback匹配字符串,但排除URL

时间:2018-10-20 21:51:36

标签: php regex preg-replace-callback

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

例如:

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

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

我有一个正则表达式,感觉很接近:

#(?!<.*?)(\btest\b)(?![^<>]*?>)#si

(这与网址部分不匹配)

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

2 个答案:

答案 0 :(得分:0)

如果总是相同的模式,则可以使用[A-Z]或[A-Za-z]之类的组合

答案 1 :(得分:0)

我最终自己解决了。这种正则表达式模式可以满足我的要求:

#(?!<a[^>]*?>)(\btest\b)(?![^<]*?<\/a>)#si