我正在使用preg_replace来替换可能包含一些网址的文本中的单词列表。 问题是,如果这些单词是网址的一部分,我不想替换这些单词。
这些例子应该被忽略:
foo.com
foo.com/foo
foo.com/foo/foo
对于一个基本的例子(用php编写),我试图忽略包含 .com 和可选斜杠和字符的字符串,使用负向预测断言,但没有成功:
preg_replace("/(\b)foo(\b)/", "$1bar$2(?!(\w+\.\w+)*(\.com)([\.\/]\w+)*)", $text);
此通话只会忽略 .com 之前的字词。 任何帮助都会非常感激。
答案 0 :(得分:0)
在这样的情况下,更容易想到倒置的问题。您希望在网址中匹配而不是中的字词。相反,你想要匹配网址和。所以,你的表达式如下:url_match_here|(?:my|words|here)
。这将允许正则表达式引擎首先使用URL,然后尝试匹配这些单词。因此,您永远不必担心匹配URL中的单词。如果要维护文本结构,可以使用preg_replace
,使用以下表达式(url_match_here)|(?:my|words|here)
并替换为\1
以保留网址和文本。
我希望这会有所帮助。
祝你好运。