Regex preg_替换不在url中的单词
我使用preg_replace替换文本中可能包含一些URL的单词列表。 问题是,如果这些词是url的一部分,我不想替换它们 应忽略以下示例: foo.com foo.com/foo foo.com/foo/foo 对于一个基本示例(用php编写),我尝试忽略包含.com和可选斜杠和字符的字符串,使用了否定的前瞻断言,但没有成功:Regex preg_替换不在url中的单词,regex,url,preg-replace,assertion,Regex,Url,Preg Replace,Assertion,我使用preg_replace替换文本中可能包含一些URL的单词列表。 问题是,如果这些词是url的一部分,我不想替换它们 应忽略以下示例: foo.com foo.com/foo foo.com/foo/foo 对于一个基本示例(用php编写),我尝试忽略包含.com和可选斜杠和字符的字符串,使用了否定的前瞻断言,但没有成功: preg\u replace(“/(\b)foo(\b)/”,“$1bar$2(?)(\w+\.\w+*(\.com)([\.\/]\w+*)”,$text) 此调用只
preg\u replace(“/(\b)foo(\b)/”,“$1bar$2(?)(\w+\.\w+*(\.com)([\.\/]\w+*)”,$text)代码>
此调用只会忽略.com之前的单词。
如果有任何帮助,我们将不胜感激。在这种情况下,思考问题就容易多了。您希望匹配不在url中的单词。相反,你想匹配url和单词。因此,您的表达式如下所示:url_match_here |(?:my | words | here)
。这将允许正则表达式引擎首先使用URL,然后尝试匹配这些单词。因此,您不必担心匹配URL中的单词。如果要维护文本结构,可以使用preg\u replace
,使用以下表达式(url\u match\u here)|(?:my | words | here)
并替换为\1
,以保留url和文本
我希望这有帮助
祝你好运。我不确定如何做到这一点。a如何仅在第二个选项匹配时进行替换?例如,foo foo.com应该生成bar foo.com,但您的解决方案将生成bar foo.com bar最终我能够使用您的方法解决问题,但是我只能使用preg_replace_回调函数来使用字符串中被丢弃的部分,并在回调函数中决定是否处理匹配的字符串。很高兴你让它工作了。对不起,我完全没有听到你的评论。