2015-03-08 58 views
1

我試圖用一個字符串替換整個單詞的出現。在SO上也有類似的問題,如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有或沒​​有正則表達式。

+0

你會逃離 – 2015-03-08 21:29:35

+0

@Dagon逃跑的句號。在針中給出輸出 - 哦,親愛的。 – oat 2015-03-08 21:31:16

回答

1

\b僅引用ASCII感知中的單詞邊界。也.是特殊的含義中的正則表達式—的字符,意思是「匹配任何單個字符(除了換行符)」

如果「針」可以包含特殊字符,使用preg_quote()和創建DIY邊界。

preg_quote()需要str並將正斜槓置於正則表達式語法的一部分的每個字符的前面。如果您需要在某些文本中匹配運行時字符串,並且該字符串可能包含特殊的正則表達式字符,這非常有用。

$str = preg_replace("~(?<=^|)" . preg_quote($needle, "~") . "(?= |$)~", 'God', $str); 
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是生鏽的。

相關問題