我试图用字符串替换整个单词的出现。这里有类似的问题,例如this和this。
所有这些问题的答案建议使用这样的正则表达式:
$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
替换。
答案 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生锈了。