【发布时间】:2019-03-25 09:52:45
【问题描述】:
我要做的是在内容块中找到所有匹配项,但忽略标签内的任何内容,以便在 preg_replace_callback() 中使用。
例如:
test
<a href="test.com">test title</a>
test
在这种情况下,我希望第一行匹配,第三行匹配,但不是 url 匹配,也不是 a 标签之间的标题匹配。
我有一个我觉得很接近的正则表达式:
#(?!<.*?)(\btest\b)(?![^<>]*?>)#si
(这与 url 部分不匹配)
但是如何修改正则表达式以排除 a 和 /a 之间的“测试”?
【问题讨论】:
-
and the fourth line to matchErm,你的输入只有三行? -
您还必须考虑嵌套标签吗?例如
<a>test<b>test</b>test</a>,或自动关闭标签?听起来像是不是正则表达式的工作(HTML和正则表达式通常不能很好地协同工作) -
HTML 和正则表达式不是好朋友。使用解析器,它更简单、更快且更易于维护。见:php.net/manual/en/class.domdocument.php
-
它不使用嵌套标签,不幸的是由于应用程序我必须使用正则表达式,但我很感谢你深思熟虑的问题和建议。
标签: php regex preg-replace-callback