2012-03-13 13 views
5

str_replace(), ": Name" ile iki kez ": Name: Name_en" ile eşleşir. Sonuçların yalnızca tüm kelimeyle eşleşmesini istiyorum. this answer nedeniyle preg_replace()'a geçmek istedim.str_replace: Sadece tüm kelimeyi eşleştir

$str = ":Name :Name_en"; 
echo $str . chr(10); 
$str = preg_replace('/\b' . ':Name' . '\b/i', '"Test"', $str); 
echo $str; 

Ancak bu, kolondan dolayı çalışmaz. Değiştirme yapılmaz. RegExp nasıl görünecek? Sınırın sözcüğüdür. Ama sanırım bir kolon böyle bir kelime sınırına ait değil.

+2

Öncelikle, "* kelimesinin" * tanımının ne olduğunu bize söylemeniz gerekir. – Jon

+0

Benim için bütün kelime ': Name',': Name_en' vb. RegExp için bilmiyorum. – testing

+0

Bu bir tanım değil, bir örnek. – Jon

cevap

9

Sen dize başlangıcında kelimesi sınır gerekmez:

$str = preg_replace('/:Name\b/i', '"Test"', $str); 
+0

Bazen çok kolay. RegExp'in '/', '\ b','/i' gibi kolayca açıklanabileceği iyi bir bağlantınız var mı? – testing

+0

Elde değil :) php.net belgelerinin oldukça iyi olduğunu düşündüm. – Evert

+0

İyi bir bağlantı arayanlar için - http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/ – Styphon

1

senin hala str_replace kullanabilirsiniz 5+ PHP kullanarak edin.

$str = ":Name :Name_en"; 
echo $str . chr(10); 

// The final int limits the function to a single replace. 
$str = str_replace(':Name', '"Test"', $str, 1); 

echo $str; 
+0

Ama hangi madde yerine geçer mi Birincisi, sonuncusu, ... Benim uygulamada bu değişmiş olabilir ... – testing

+1

Birincisi. str_replace sıralıdır. – Bradmage

+1

Bu, belgelerin söylediği gibi görünmüyor: 'sayım: Geçilirse, bu, gerçekleştirilen değiştirmelerin sayısına ayarlanır. Bu yüzden değişken bir referans, sabit değil – jokkedk

1

bir ilişkisel bir sözlük ya da tutucuları gibi bir şey olan birden fazla anahtar kelime değiştirmek istiyorsanız , size düzenli ifade deseni eşleşmesi için kullanabilir:

$words=array("_saudation_"=>"Hello", "_animal_"=>"cat", "_animal_sound_"=>"MEooow"); 
$source=" _saudation_! My Animal is a _animal_ and it says _animal_sound_ , _no_match_"; 

echo (preg_replace_callback("/\b_(\w*)_\b/", function($match) use ($words) { if(isset($words[$match[0]])){ 
return ($words[$match[0]]);}else{ return($match[0]);}}, $source)); 

İade: Merhaba! Benim Hayvan bir kedi olduğunu ve "_no_match_" çeviri yoksun olmasına rağmen, bu regex sırasında maç, ama onun anahtarı koruyacaktır MEooow, _no_match_

Bildirimi, Thats diyor.

+0

Bu, farklı tuşlarla birden fazla değiştirmeye izin verir – Miguel

İlgili konular