سؤال

يممم...كيف يمكنني استخدام المتغيرات في الدعوة إلى 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 إذا المتغيرات الخاصة بك قد تحتوي على التعبير العادية الايعازات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top