我想创建一个PHP Regex脚本,它可以匹配和替换字符串中的单词。
正则表达式只需要匹配完整的单词,我可以很容易地使用来完成这一点
/'b(SEARCH_TERM)'b/
我遇到的问题是,一些字符串包含html元素,例如<a>标签和<img>标记,其中href和src属性有时可能在其路径中包含要替换的单词。如果这个词在这些元素中被替换,那么链接或图像将不再工作。
例如,将单词"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
因此,您应该使用语法分析器