باستخدام $ المتغيرات في preg_replace في PHP
-
05-07-2019 - |
سؤال
يممم...كيف يمكنني استخدام المتغيرات في الدعوة إلى preg_replace?
لم يكن هذا العمل:
foreach($numarray as $num => $text)
{
$patterns[] = '/<ces>(.*?)\+$num(.*?)<\/ces>/';
$replacements[] = '<ces>$1<$text/>$2</ces>';
}
نعم ، $num
هو سبقتها علامة زائد.نعم أريد "tag the $num as <$text/>
".
المحلول
استبدال الخاص بك نمط تبدو على ما يرام, ولكن كما كنت قد تستخدم علامات الاقتباس المفردة في مطابقة النمط الخاص بك $num متغير لن تدرج في ذلك.بدلا من ذلك, حاول
$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';
لاحظ أيضا أنه عند بناء نمط من "غير معروف" المدخلات مثل هذا, انها عادة ما تكون فكرة جيدة لاستخدام preg_quote.على سبيل المثال
$patterns[] = '/<ces>(.*?)\+'.preg_quote($num).'(.*?)<\/ces>/';
على الرغم من أنني أعتقد إعطاء اسم المتغير دائما الرقمية في قضيتك.
نصائح أخرى
وسيتم فقط توسيع متغيرات في <لأ href = "http://docs.php.net/manual/en/language.types.string.php#language.types.string.syntax.double" يختلط = "noreferrer "> سلاسل أعلن مع التنصيص . لذلك إما استخدام علامات الاقتباس المزدوجة:
$patterns[] = "/<ces>(.*?)\\+$num(.*?)<\\/ces>/";
$replacements[] = "<ces>$1<$text/>$2</ces>";
وأو استخدام سلسلة سلسلة:
$patterns[] = '/<ces>(.*?)\+'.$num.'(.*?)<\/ces>/';
$replacements[] = '<ces>$1<'.$text.'/>$2</ces>';
ويجب أيضا أن نلقي نظرة على preg_quote
إذا المتغيرات الخاصة بك قد تحتوي على التعبير العادية الايعازات.