使用 preg_replace_callback 进行多次匹配

using preg_replace_callback for multiple matches

我尝试使用 preg_replace_callback 作为

的简单正则表达式
$str = 'Key Value';
$str = preg_replace_callback('/(key) (.*?)/', function($m) { 
return $m[2].$m[1];
}, $str);

echo $str;

我预计输出会是

ValueKey

但事实并非如此。我哪里做错了?

首先,您必须删除模式中 * 之后的 ?。否则它将尽快停止匹配(即在 none 个字符之后)。

其次。您要么必须使用不区分大小写的匹配,添加 i 参数,要么更改模式中单词 key 的大小写:

<?php
$str = 'Key Value';
$str = preg_replace_callback('/(key) (.*)/i', function($m) { 
return $m[2].$m[1];
}, $str);

echo $str; // ValueKey