我正在寻找一个可以匹配和替换字符串中的单词的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的Lookbehind Assertions(如下所示),但不允许使用可变长度的通配符。
/(?<!(href|src)=.*)\b(SEARCH_TERM)\b/
注意:我特别需要使用Regex,而不是DOM解析器。
答案 0 :(得分:2)
正如我所提到的,你需要使用html parser。
但如果你想要它
/\btest\b(?=[^>]*(<|$))/s
以上正则表达式只有在没有匹配<
end of string
或>
(不是行)才会匹配
注意
如果您的文字本身包含>
,则无效。
例如
hello>world
因此你应该使用解析器的原因