使用 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
我尝试使用 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