PHP preg_replace dolar değişkenlerini kullanma

2 Cevap php

Ummm ... nasıl preg_replace için bir çağrı değişkenler kullanabilirim?

Bu işe yaramadı:

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

Evet, $num artı işaretini koymak edilir. Evet, ben "tag the $num as <$text/>" istiyorum.

2 Cevap

Sizin yedek desen Tamam görünüyor, ancak eşleşen desende tek tırnak kullandım olarak, senin $ num değişkeni içine takılı olmayacak. Bunun yerine, deneyin

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

Ayrıca, bu gibi "bilinmeyen" girişlerden bir deseni oluştururken, genellikle kullanmak iyi bir fikir olduğunu unutmayın preg_quote. örneğin

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

Ben değişken adı verilen sanırım olsa bu durumda her zaman sayısal bulunuyor.

Değişkenler sadece strings declared with double quotes yaygınlaştırılacaktır. Yani ya çift tırnak kullanın:

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

Veya dize birleştirme kullanın:

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

Lütfen değişkenler normal ifade meta karakterler içerebilir varsa da preg_quote bir göz atmalısınız.