2015-03-25 70 views
0

我試圖替換部分字符串。但是,我遇到了一個問題,當我搜索字符串以相同的字符開始:嘗試用相同的搜索字符替換部分字符串

$string = "Good one :y. Keep going :y2"; 

$str = str_replace(array_keys($my_array), array_values($my_array), $string); 
$my_array= array(":y" => "a", ":y2" => "b"); 

輸出繼電器:

Good one a. Keep going a2 

我需要str_replace()到Word正確/完全匹配。

回答

2

除此之外,你應該定義數組首先你使用它之前,這應該爲你工作:

$str = strtr($string, $my_array); 

您的問題是str_replace()穿過整個字符串,並取代一切可能,你還可以看到這在手冊中。

從那裏報價:

由於str_replace()函數代替左至右,它可能會進行多次更換■當替換以前插入的值。另請參閱本文檔中的示例。

因此,我在這裏使用了strtr(),因爲它試圖匹配搜索中最長的字節。

還可以手動和報價在從那裏讀此:

如果給定的兩個參數,所述第二格式應爲陣列中的陣列(「從」 =>「到」,。 ..)。返回值是一個字符串,其中所有出現的數組鍵都被相應的值替換。 最長的鍵將首先嚐試。一旦子字符串被替換,它的新值將不會被再次搜索。

+0

謝謝你拯救我的生命:) – 2015-03-25 10:29:48

+0

@НиколаВелев不客氣! (順便說一下:你可以接受這個答案最能幫助你,解決你的問題!(http://meta.stackexchange.com/q/5234)如果你有這樣的答案,你也可以爲你所有的其他問題做這件事) – Rizier123 2015-03-25 10:34:25

+0

謝謝隊友,我會這樣做:) – 2015-03-25 10:45:27

1

嘗試更換先爲:y2,然後:y

$string = "Good one :y. Keep going :y2"; 

$my_array= array(":y2" => "b", ":y" => "a"); 

$str = str_replace(array_keys($my_array), array_values($my_array), $string); 

輸出

Good one a. Keep going b 

Try it

+0

你有正確的想法,但你使用了錯誤的函數:)在這裏你幾乎做了'strtr()'的實現,但是你不能用'str_replace()'完成它。在這裏,你也從最長的字節替換開始,但你仍然會替換你以前用'strtr()'替換的替換。 (例如。如果你用':y'代替':y2',你最終會用'aa',但用'strtr()'你會得到'a:y') – Rizier123 2015-03-25 09:17:23

+0

是的,我不知道那個函數,I總是使用str_replace來做這個knida工作。樂於學習新東西 – Phate01 2015-03-25 09:28:53

0
:y\b 

使用此僅更換:y而不是:y2 .S ee演示。

https://regex101.com/r/sJ9gM7/9

$re = "":y\\b"m"; 
$str = "Good one :y. Keep going :y2\n"; 
$subst = "a"; 


$result = preg_replace($re, $subst, $str); 

類似地,對於使用:y2:y2\b