2016-04-01 23 views
3

parantez VE parantez metni değiştirmek.PHP Regex Aşağıdaki dizeyi var

Yalnızca parantez içindeki metni almanın yolunu buldum, ancak parantezleri kendileri değiştirmek istiyorum.

$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]); 

Ben de \[(.*?)\] bakılmaksızın köşeli parantez içeriğinin her şeyi değiştirmeye çalışırken ile çalıştı, ama sadece Marcello isterken ben, [Marcello] gibi bir şey olsun.

Köşeli parantez dahil olmak üzere içeriği nasıl değiştirebilirim?

+2

desen öncesi ve sınırlayıcı ile eklenmesi gerekir ayrıca bkz: lütfen aşağıdaki kodunu görebilirsiniz küçük bir test etmedi. Gelecekte '/', ''/ \ [firstname \] /'' – treegarden

+0

Hata bildirimi kullanma gibi kullanabilirsiniz. Bu atılmış olurdu: 'Parse hatası: 12 satırındaki beklenmedik ']' hatası '' sonra '' ayırıcı alfanümerik veya ters eğik çizgi olmamalıdır. http://php.net/manual/en/regexp.reference.delimiters.php – chris85

cevap

4

gerçekten bunun için regex gerekmez, bu yüzden basit bir str_replace örnek var.

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

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

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

print $modified; 

Will çıkış

Welcome Marcellus Wallace 
+0

Bu anda gerçekten aptal hissediyorum. Hızlı bir soru: Neden bu yöntemi regex'e göre önerirsin (eğer bu eğer regex ile de yapılabilirse)? – wiredmark

+0

Sanırım str_replace' için giderdim çünkü bu normal bir ifade eşleşmesinden faydalanacağınız karmaşık bir dizgi değiştirme değil, aslında basit bir dize yerine geçiyor. –

+1

Ayrıca, preg_replace' gibi ** str_replace'ndan önemli ölçüde ** daha yavaş ** bir thunk yaptı thy_ :) burada bazı rastgele bir kıyaslama http://micro-optimization.com/str_replace-vs-preg_replace-without- düzenli-expression.html –

3

Aşağıda kalıptır. probleminizi @solves kullanarak. ve sen str_replace ile bunu başarabilirsiniz sandbox 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

geçerek kontrol().

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

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

echo $result; 

PHP str_replace()

İlgili konular