Php替换精确单词

Php替换精确单词,php,regex,preg-replace,Php,Regex,Preg Replace,我的问题是: 使用preg_替换('@\b(word)\b@','**',$text) 在文本中,我有word\word和word,上面的preg\u replace同时替换word\word和word,因此我得到的字符串是***\word和*** 我希望我的字符串看起来像:word\word和*** 这可能吗?我做错了什么 以后编辑 我有一个包含url的数组,我使用该数组并替换找到url的文本,但它不起作用 例如,我有和 如果我有它也可以替换。你可以使用str\u替换(“word\word”,

我的问题是:

使用
preg_替换('@\b(word)\b@','**',$text)

在文本中,我有
word\word和word
,上面的
preg\u replace
同时替换
word\word
word
,因此我得到的字符串是
***\word和***

我希望我的字符串看起来像:
word\word和***

这可能吗?我做错了什么

以后编辑

我有一个包含url的数组,我使用该数组并替换找到url的文本,但它不起作用

例如,我有和


如果我有它也可以替换。

你可以使用str\u替换(“word\word”,“word\word and”)
,我真的不明白你为什么需要在上面给出的例子中使用preg\u替换。

你可以使用str\u替换(“word\word”,“word\word and”),我真的不明白为什么在上面给出的例子中需要使用preg_replace。

您实际上是在指定不希望某些字符算作单词边界。因此,您需要自己指定“边界”,如下所示:

preg_replace('@(^|[^\w\\])(word)([^\w\\]|$)@','**',$text);

这样做的目的是搜索除反斜杠
\
之外由行边界或非单词字符包围的单词。因此,它将匹配.word,但不匹配.word\而不匹配`\word。如果需要从匹配中排除其他字符,只需将它们添加到括号内。

您实际上是在指定不希望某些字符算作单词边界。因此,您需要自己指定“边界”,如下所示:

preg_replace('@(^|[^\w\\])(word)([^\w\\]|$)@','**',$text);

这样做的目的是搜索除反斜杠
\
之外由行边界或非单词字符包围的单词。因此,它将匹配.word,但不匹配.word\而不匹配`\word。如果需要从匹配中排除其他字符,只需将它们添加到括号内。

这里有一个简单的解决方案,不使用正则表达式。它只会取代单独出现的单词

<?php
$text = "word\word word cat dog";
$new_text = "";
$words = explode(" ",$text); // split the string into seperate 'words'

$inc = 0; // loop counter
foreach($words as $word){

    if($word == "word"){ // if the current word in the array of words matches the criteria, replace it
        $words[$inc] = "***";
    }
    $new_text.= $words[$inc]." ";
    $inc ++;
}

echo $new_text; // gives 'word\word *** cat dog'
?>

这里有一个不使用正则表达式的简单解决方案。它只会取代单独出现的单词

<?php
$text = "word\word word cat dog";
$new_text = "";
$words = explode(" ",$text); // split the string into seperate 'words'

$inc = 0; // loop counter
foreach($words as $word){

    if($word == "word"){ // if the current word in the array of words matches the criteria, replace it
        $words[$inc] = "***";
    }
    $new_text.= $words[$inc]." ";
    $inc ++;
}

echo $new_text; // gives 'word\word *** cat dog'
?>


还有其他事情要做吗?这个词总是在字符串的末尾吗?前面的那些总是在反斜杠附近吗…?您可能需要
\s
而不是
\b
,因为反斜杠也是一个单词边界:)当然,
\s
在字符串的开始/结束处不匹配。可能将$text按空格分解成数组,然后,如果单词=word\word离开,请将其改为***也许?检查我的上一次编辑@Chris如果我的用户尝试输入“textText”$url“textText”,但没有空格,该怎么办?它不会被替换,它将被忽略。在那种情况下,依赖单词边界是行不通的。澄清你的问题可能是有好处的,因为它不是100%清楚你想要的是什么。还有什么可以继续的吗?这个词总是在字符串的末尾吗?前面的那些总是在反斜杠附近吗…?您可能需要
\s
而不是
\b
,因为反斜杠也是一个单词边界:)当然,
\s
在字符串的开始/结束处不匹配。可能将$text按空格分解成数组,然后,如果单词=word\word离开,请将其改为***也许?检查我的上一次编辑@Chris如果我的用户尝试输入“textText”$url“textText”,但没有空格,该怎么办?它不会被替换,它将被忽略。在那种情况下,依赖单词边界是行不通的。澄清你的问题可能是值得的,因为你想要的不是100%清楚他不想替换
word\wording
这不是OP要求的,他想替换除某些单词边界之外的所有匹配项。是的,在我添加答案后,他已经编辑了问题几次。没什么奇怪的,我的答案没有帮助,是吗?他不想替换
word\wording
这不是OP要求的,他想替换除某些单词边界之外的所有匹配项。是的,在我添加我的答案后,他对问题进行了几次编辑。没那么奇怪,我的回答没有帮助,是吗?