PHP Regex替换括号和括号之间的文本


PHP Regex replace text between brackets AND brackets

我有以下字符串:

Welcome [firstname] [lastname]

我正在尝试使用preg_replace(),以便用Marcello替换[名字],用Silvestri代替[名字]。

我只能找到将文本放在括号内的方法,但我想替换括号本身。

$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

如何替换包括方括号在内的内容?

您并不是真的需要regex,所以这里有一个简单的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()