PHP:Regex在LookbackingAssertions中使用通配符替换单词


PHP: Regex replace word using wildcard characters in Lookbehind Assertions

我想创建一个PHP Regex脚本,它可以匹配和替换字符串中的单词。

正则表达式只需要匹配完整的单词,我可以很容易地使用来完成这一点

/'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的Lookbehing断言(如下所示),但不允许使用可变长度的通配符。

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

注意:我特别需要使用Regex,而不是DOM解析器来实现这一点。

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

但如果你想要

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

只有当前面有<end of string(非行)而不匹配> 时,上面的正则表达式才会匹配


注意

如果您的文本本身包含>,这将不起作用。

例如

 hello>world

因此,您应该使用语法分析器