Используя переменные $ в preg_replace в PHP

Присвойте их проектам, которые не требуют "высшего качества стабильный код", если это - Ваше беспокойство, и позвольте разработчику младшему перестать работать. Сделайте, чтобы они были одним для 'вхождения в выходные' для исправления их ошибок. Пообедайте много и разговор о методах разработки программного обеспечения (не лекции, но обсуждения). Вовремя они получат и разработают лучшие практики, чтобы сделать задачи, которые им присваивают.

, Кто знает, они могли бы даже придумать что-то лучше, чем методы, которые в настоящее время использует Ваша команда.

11
задан Gumbo 9 September 2009 в 16:45
поделиться

2 ответа

Ваш шаблон замены выглядит нормально, но поскольку вы использовали одинарные кавычки в шаблоне соответствия, ваша переменная $ num не будет вставлена ​​в него. Вместо этого попробуйте

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

. Также обратите внимание, что при построении шаблона из «неизвестных» входных данных, как это, обычно рекомендуется использовать preg_quote . например

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

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

14
ответ дан 3 December 2019 в 03:36
поделиться

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

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

, либо конкатенацию строк:

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

Вам также следует взглянуть на preg_quote , если ваши переменные могут содержать метасимволы регулярных выражений.

13
ответ дан 3 December 2019 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: