仅使用或不使用正则表达式替换整个单词

时间:2015-03-08 21:27:01

标签: php regex

我试图用字符串替换整个单词的出现。这里有类似的问题,例如thisthis

所有这些问题的答案建议使用这样的正则表达式:

$needle = "a";
$haystack = "oh my dear a";
$haystack = preg_replace("/$needle\b/", 'God', $haystack);
echo $haystack;

这适用于整个单词 - 回声oh my dear God

但是,如果我在针和干草堆中用a替换a.,我会发现

$needle = "a.";
$haystack = "oh my dear a.";

输出变为oh my deGod a.,因为.被评估为正则表达式。

我希望a.在有或没有正则表达式的情况下被God替换。

2 个答案:

答案 0 :(得分:1)

\b仅指ASCII感知中的单词边界。此外,.是正则表达式中具有特殊含义的字符 - 表示“匹配任何单个字符(除了换行符”)

如果“指针”可能包含特殊字符,请使用preg_quote()并创建DIY边界。

  

preg_quote()接受str并在作为正则表达式语法一部分的每个字符前放置一个反斜杠。如果您有一个需要在某些文本中匹配的运行时字符串,并且该字符串可能包含特殊的正则表达式字符,这将非常有用。

$str = preg_replace("~(?<=^| )" . preg_quote($needle, "~") . "(?= |$)~", 'God', $str);

答案 1 :(得分:1)

也许这会给你一个灵感......

$haystack="oh my dear a." ;
$needle="a" ;
$hout=$haystack ;
$hout=~ s/\b$needle\b\./God/g ;

print "$haystack $needle $hout\n";

...产生这个输出......

oh my dear a. a oh my dear God

这适用于perl。对不起,我的php生锈了。