0

我正在寻找可以匹配和替换字符串中的单词的 PHP 正则表达式脚本。

正则表达式只需要匹配完整的单词,我可以通过以下方式轻松完成:

/\b(SEARCH_TERM)\b/

我遇到的问题是某些字符串包含 html 元素,例如<a>标签和<img>标签,其中hrefsrc属性有时可能在其路径中包含要替换的单词。如果在这些元素中替换了这个词,则链接或图像将不再有效。

例如,将以下示例字符串的单词“test”替换为“SEARCH_TERM”:

my test string <a href="http://www.google.com?q=my+test+string">link</a>

将返回:

my SEARCH_TERM string <a href="http://www.google.com?q=my+SEARCH_TERM+string">link</a>

而我需要它忽略 href 属性文本并返回:

my SEARCH_TERM string <a href="http://www.google.com?q=my+test+string">link</a>

我已经研究过使用 Regex 的 Lookbehind Assertions(如下所示),但不允许使用可变长度的通配符。

/(?<!(href|src)=.*)\b(SEARCH_TERM)\b/

注意:我特别需要使用正则表达式而不是 DOM 解析器来执行此操作。

4

1 回答 1

2

正如我提到的,您需要使用html 解析器

但如果你想要

/\btest\b(?=[^>]*(<|$))/s

上面的正则表达式只有在某处没有匹配的<情况end of string下才匹配>


笔记

如果您的文本本身包含>.

例如

 hello>world

因此,您应该使用解析器的原因

于 2013-07-03T05:28:17.760 回答