我想做的是找到内容块中的所有匹配项,但忽略标签内的任何内容,以便在 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