2009-09-09 21 views
8

Ummm… bir çağrıda değişkenleri preg_replace için nasıl kullanırım?

Bu

işe yaramadı:
foreach($numarray as $num => $text) 
    { 
     $patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/'; 
     $replacements[] = '<ces>$1<$text/>$2</ces>'; 
    } 

Evet, $num artı işareti önce geldiği. Evet, " tag the $num as <$text/>" adresini istiyorum.

cevap

12

Yeni modeliniz iyi görünüyor, ancak eşleşen desende tek tırnak kullandığınız için $ num değişkeniniz eklenmeyecek. Bunun yerine,

$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/'; 
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>'; 

Ayrıca böyle "bilinmeyen" girişlerden bir örnek modelin oluştururken, genellikle preg_quote kullanmak iyi bir fikir olduğuna dikkat deneyin. Örneğin.

$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/'; 

Değişken adı verildiğini tahmin etsem de sizin durumunuzda her zaman sayısal.

+0

Teşekkürler Gumbo, Paul - her iki girdiniz de yardımcı oldu! – Steve

12

Değişkenler yalnızca strings declared with double quotes numaralı belgede genişletilecektir. senin değişkenler düzenli ifade meta karakterler içerebilir eğer

$patterns[]  = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/'; 
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>'; 

Ayrıca preg_quote bakmak gerekir:

$patterns[]  = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/"; 
$replacements[] = "<ces>$1<$text/>$2</ces>"; 

Veya kullanım dize birleştirme: Yani ya çift tırnak kullanır.