Вопрос

Эммм...как использовать переменные при вызове 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>/';

Хотя я думаю, учитывая имя переменной, в вашем случае оно всегда числовое.

Другие советы

Переменные будут раскрываться только в строки объявлены в двойных кавычках . Так что либо используйте двойные кавычки:

$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