Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex preg_替换不在url中的单词_Regex_Url_Preg Replace_Assertion - Fatal编程技术网

Regex preg_替换不在url中的单词

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_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)

此调用只会忽略.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_回调函数来使用字符串中被丢弃的部分,并在回调函数中决定是否处理匹配的字符串。很高兴你让它工作了。对不起,我完全没有听到你的评论。