PHP正则表达式替换方括号和方括号之间的文本

PHP正则表达式替换方括号和方括号之间的文本,php,regex,replace,preg-replace,Php,Regex,Replace,Preg Replace,我有以下字符串: Welcome [firstname] [lastname] 我试图使用preg_replace(),以便将[firstname]替换为Marcello,将[lastname]替换为Silvestri 我只能找到将文本放在括号内的方法,但我想替换括号本身 $string = "Welcome [firstname] [lastname]"; $patterns = array(); $patterns[0] = '\[firstname\]'; $patterns[1] =

我有以下字符串:

Welcome [firstname] [lastname]
我试图使用
preg_replace()
,以便将[firstname]替换为Marcello,将[lastname]替换为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


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

您不需要正则表达式,因此这里有一个简单的
stru replace
示例

$string = "Welcome [firstname] [lastname]";

$find = [
    '[firstname]','[lastname]'
];
$replace = [
    'Marcellus','Wallace'
];

$modified = str_replace($find,$replace,$string);

print $modified;
将输出

Welcome Marcellus Wallace

以下是您的模式。使用@可以解决您的问题。并在沙箱中检查它


您可以使用str_replace()实现这一点。做了一个小测试,可以看到下面的代码:

$string = "Welcome [firstname] [lastname]";
$patterns = array("Marcello", "Silvestri");
$replace = array("[firstname]", "[lastname]");

$result = str_replace($replace, $patterns , $string);

echo $result;

另请参见PHP

该模式需要预先设置并附加分隔符。您可以使用
/
,例如
'/\[firstname\]/'
在将来使用错误报告。这可能会引发:
分隔符不能是字母数字或反斜杠,因为第12行的
分析错误:语法错误,意外“]”已修复。在这一刻我觉得自己很愚蠢。一个简单的问题:为什么你会建议使用这个方法而不是正则表达式(如果这个方法也可以用正则表达式实现的话)?我想我会选择
str_replace
,因为这不是一个复杂的字符串替换,你可以从正则表达式匹配中获益,事实上它是一个直接的简单字符串替换,看起来,
preg\u replace
要比
str\u replace
慢得多,谁会这么做:)这里是一些随机的基准测试
$string = "Welcome [firstname] [lastname]";
$patterns = array("Marcello", "Silvestri");
$replace = array("[firstname]", "[lastname]");

$result = str_replace($replace, $patterns , $string);

echo $result;