Регулярное выражение PHP заменяет текст между скобками И скобками
У меня есть следующая строка:
Welcome [firstname] [lastname]
Я пытаюсь использовать preg_replace()
, чтобы [имя] было заменено на Марчелло и [фамилия] на Сильвестри.
Я смог найти только способ поместить текст в скобки, но я хочу заменить сами скобки.
$string = "Welcome [firstname] [lastname]";
$patterns = array();
$patterns[0] = '\[firstname\]';
$patterns[1] = '\[lastname\]';
$replacements = array();
$replacements[0] = 'Marcello';
$replacements[1] = 'Silvestri';
echo preg_replace($patterns, $array, $string]);
Я также пытался с помощью \[(.*?)\]
попытаться заменить все, независимо от содержимого квадратных скобок, но я получаю что-то вроде [Marcello]
, в то время как я просто хочу Marcello
.
Как я могу заменить содержимое, включая квадратные скобки?
3 answers
Вам на самом деле не нужно регулярное выражение для этого, поэтому вот простой пример str_replace
.
$string = "Welcome [firstname] [lastname]";
$find = [
'[firstname]','[lastname]'
];
$replace = [
'Marcellus','Wallace'
];
$modified = str_replace($find,$replace,$string);
print $modified;
Выведет
Welcome Marcellus Wallace
Ниже приведен ваш шаблон. использование @ решает вашу проблему. и проверьте это в песочнице здесь
$string = "Welcome [firstname] [lastname]";
$patterns = array();
$patterns[0] = '@\[firstname\]@';//this is what you need
$patterns[1] = '@\[lastname\]@';
$replacements = array();
$replacements[0] = 'Marcello';
$replacements[1] = 'Silvestri';
echo preg_replace($patterns, $replacements, $string);
Вы можете добиться этого с помощью str_replace(). Сделал небольшой тест, вы можете увидеть код ниже:
$string = "Welcome [firstname] [lastname]";
$patterns = array("Marcello", "Silvestri");
$replace = array("[firstname]", "[lastname]");
$result = str_replace($replace, $patterns , $string);
echo $result;
Смотрите также PHP str_replace()