Ummm … как использовать переменные при вызове 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
если ваши переменные могут содержать метасимволы регулярного выражения.