PHP正则表达式替换方括号和其中的文本

3
我有以下字符串:
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。如何替换包括方括号在内的内容?

2
模式需要预先添加分隔符。您可以使用“/”,例如“'/[firstname]/'”。 - ksbg
将来请使用错误报告。在修复了第12行的“Parse error: syntax error, unexpected ']'”后,这会抛出:“分隔符不能是字母数字或反斜杠”。http://php.net/manual/en/regexp.reference.delimiters.php - chris85
3个回答

5

你其实不需要正则表达式,这里提供一个简单的 str_replace 示例。

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

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

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

print $modified;

将输出

Welcome Marcellus Wallace

此刻我感觉真的很蠢。请问一个问题:如果这也可以用正则表达式来完成,为什么您会建议使用这种方法呢? - wiredmark
我想我会选择 str_replace,因为这不是一个复杂的字符串替换,你不需要从正则表达式匹配中受益,实际上它只是一个简单的字符串替换。 - Alex Andrei
1
此外,看起来 preg_replacestr_replace 慢得多,这让人感到惊讶:) 在这里,有一些随机基准测试数据 http://micro-optimization.com/str_replace-vs-preg_replace-without-regular-expression.html - Alex Andrei

3
以下是您的模式。使用@solves解决您的问题。并在沙盒中检查此处
 $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);

1
您可以使用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()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接