正则表达式有点过头,但我正在努力学习。
我有一个正在运行的正则表达式,我在preg_replace中使用匹配字符串并将其替换为html链接。除非在锚标记中也有子标记,否则它会正确地避免匹配在锚标记内部。
这是(更新的)模式:
/(?!(?:[^<]+>|[^>]+<\/a>))\b(Match Me)\b/is
以及一些示例文本:
<a href="#">Don't Match Me <span>web</span></a>
<a href="#">Don't Match Me</a>
Match Me
<span>Match Me</span>
上述正则表达式将匹配第1行,第3行和第4行的文本。但是,我只想匹配3号和3号文本中的“匹配我”。第4行。
注意:我正在筛选的内容并没有像我的例子那样用线条整齐地分隔。事实上这是一段文字。
我愿意使用DOM,但我正在使用preg_replace的数组功能大量内容并应用多个替换,如下所示:
preg_replace($searchFor, $linkArray, $content);
其中$ searchFor和$ linkArray都是多维数组,相应的键分别包含模式和替换html。
感谢任何帮助!
答案 0 :(得分:3)
使用正则表达式匹配HTML非常棘手。此处接受的答案不允许匹配在两个单独的锚标记之间的字符串,例如:
HTML:
<a href="#">Don't Match Me <span>web</span></a>
match me
<a href="#">Don't Match Me</a>match me<a href="#">Don't Match Me</a>
之前我使用过以下正则表达式,但这只适用于php: https://regex101.com/r/v0FfFC/1
答案 1 :(得分:1)
答案 2 :(得分:0)