2013-12-11 51 views
1

我想用preg_replace()在一個字符串%zź正則表達式的preg_replace()更換精確串

隨時隨地更換所以我寫了:

$pattern = array(); 
$pattern[0] = '/^\%z$/'; 
$replacements = array(); 
$replacements[0] = '/\ź/'; 

string = "oraz ró%znego typu innych wydarzen kulturalnych, sportowych i rozrywkowych." 
preg_replace($pattern, $replacement, $string); 
echo $string; 

上面的例子是行不通的。我是新來的正則表達式,所以我不太確定我做錯了什麼。

任何意見將不勝感激。 :)

+3

你並不需要使用正則表達式爲。 str_replace做得更好。 –

回答

1

因爲%z從你的正則表達式刪除錨點^ and $不是在輸入的開頭或結尾:

$pattern[0] = '/%z/'; 

而且你不需要在更換提供正則表達式的分隔符既不你需要逃避%&所以這將工作:

$replacements[0] = 'ź' 
1

有幾個問題,其中一些沒有任何效果:

  • %並不需要進行轉義
  • ^$錨開始和結束的字符串。刪除它們:/%z/
  • 您在函數調用中使用$replacement而不是$replacements
  • 由於您只做一個替換,所以不需要數組。
  • 您不應該在更換中包含PCRE分隔符。它是一個字符串而不是正則表達式。用str_replace更換preg_replace簡單地把它寫成ź

你也可以做一個簡單的字符串替換。只需從pattern中刪除分隔符。

+0

解析錯誤的好處。不知道多久會讓我看到那一個。 :P – user1216849

1

在你的表情,你不需要使用字符串^錨的開頭或字符串的結尾$錨因爲%z是不是在你的字符串,要麼是地方的%&字符也不需要是在這裏逃脫了,因爲這是一個簡單的替換,我看到沒有必要使用數組來完成這項任務。

您可以使用str_replace這個。

$string = 'oraz ró%znego typu innych wydarzen kulturalnych, sportowych i rozrywkowych.'; 
$string = str_replace('%z', 'ź', $string); 
echo $string; 

使用更便宜的版本,strtr(你可以把多個模式和更換陣列中的)

$string = 'oraz ró%znego typu innych wydarzen kulturalnych, sportowych i rozrywkowych.'; 
$string = strtr($string, array('%z' => 'ź')); 
echo $string; 

如果你還決定使用正則表達式來做到這一點。

$string = 'oraz ró%znego typu innych wydarzen kulturalnych, sportowych i rozrywkowych.'; 
$string = preg_replace('/%z/i', 'ź', $string); 
echo $string; 

輸出

oraz róźnego typu innych wydarzen kulturalnych, sportowych i rozrywkowych. 
+0

感謝您向我展示解決此問題的不同方法。 :)乾杯! – user1216849

+0

很高興我也可以幫忙。 – hwnd