Регулярное выражение 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.

Как я могу заменить содержимое, включая квадратные скобки?

Author: wiredmark, 2016-04-01

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
 4
Author: Alex Andrei, 2016-04-01 13:57:49

Ниже приведен ваш шаблон. использование @ решает вашу проблему. и проверьте это в песочнице здесь

 $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);
 3
Author: Atilla Arda Açıkgöz, 2016-04-01 14:01:08

Вы можете добиться этого с помощью 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()

 1
Author: Mardin101, 2016-04-01 14:14:51