2016-04-01 60 views
3

我有以下字符串括號,括號中的文字:PHP正則表達式替換

Welcome [firstname] [lastname] 

我想使用preg_replace()使[名字]被替換爲馬塞洛和[姓氏]與西爾維斯特

我只能找到方法來獲取括號內的文本,但我想自己替換括號。

$string = "Welcome [firstname] [lastname]"; 

$patterns = array(); 
$patterns[0] = '\[firstname\]'; 
$patterns[1] = '\[lastname\]'; 

$replacements = array(); 
$replacements[0] = 'Marcello'; 
$replacements[1] = 'Silvestri'; 

echo preg_replace($patterns, $array, $string]); 

我也試圖與\[(.*?)\]試圖不管方括號的內容來代替一切,但我得到的東西像[Marcello],而我只是想Marcello

如何更換包括方括號在內的內容?

+2

模式需要預先與分隔符追加。您可以使用'/',如'/ \ [firstname \] /' – treegarden

+0

將來使用錯誤報告。這會引發:修復了第12行中出現'Parse error:syntax error,unexpected']後'分隔符不能是字母數字或反斜槓'的問題'。 http://php.net/manual/en/regexp.reference.delimiters.php – chris85

回答

4

你不要真的需要這個正則表達式,所以這裏是一個簡單的str_replace的例子。

$string = "Welcome [firstname] [lastname]"; 

$find = [ 
    '[firstname]','[lastname]' 
]; 
$replace = [ 
    'Marcellus','Wallace' 
]; 

$modified = str_replace($find,$replace,$string); 

print $modified; 

將輸出

Welcome Marcellus Wallace 
+0

我覺得這一刻真的很蠢。一個簡單的問題:爲什麼你會建議這種方法通過正則表達式(如果這可以用正則表達式來完成)? – wiredmark

+0

我想我會去'str_replace',因爲這不是一個複雜的字符串替換,你會從正則表達式匹配中受益,實際上它是一個直通簡單字符串替換。 –

+1

此外,它看起來像'preg_replace' **顯着**比'str_replace'慢'_who'd thunk it_ :)這裏有一些隨機基準http://micro-optimization.com/str_replace-vs-preg_replace-without-常規expression.html –

3

下面是你的格局。用@解決你的問題。並在沙箱中檢查它here

$string = "Welcome [firstname] [lastname]"; 

$patterns = array(); 
$patterns[0] = '@\[firstname\]@';//this is what you need 
$patterns[1] = '@\[lastname\]@'; 

$replacements = array(); 
$replacements[0] = 'Marcello'; 
$replacements[1] = 'Silvestri'; 

echo preg_replace($patterns, $replacements, $string); 
1

您可以通過str_replace()來實現此目的。做了一個小測試,你可以看到下面的代碼:

$string = "Welcome [firstname] [lastname]"; 
$patterns = array("Marcello", "Silvestri"); 
$replace = array("[firstname]", "[lastname]"); 

$result = str_replace($replace, $patterns , $string); 

echo $result; 

也看到PHP str_replace()