如果我有一个像<start_delim>asdf<end_delim>
这样的字符串,并且我想在分隔符之间取一个字母数字字符串并使用正则表达式将其反转,那么我该怎么做呢?
我的本能是使用类似preg_replace("<start_delim>([a-zA-Z0-9]+)<end_delim>", strrev($1), $str)
的东西,但出于显而易见的原因,这种方式无效。
答案 0 :(得分:4)
$str = "<start_delim>asdf<end_delim>";
function my_callback($m) {
return $m[1].strrev($m[2]).$m[3];
}
echo preg_replace_callback("/(<start_delim>)([a-zA-Z0-9]+)(<end_delim>)/", 'my_callback' , $str);
答案 1 :(得分:0)
与之前的解决方案类似,但使用lambda:
$str = "<start_delim>asdf<end_delim>";
$result = preg_replace_callback('/<start_delim>([a-zA-Z0-9]+)<end_delim>/', function($matches) {
return strrev($matches[1]);
}, $str);
echo "$result\n";
答案 2 :(得分:-1)
有人在评论中指出最好不要使用/ e修饰符,但是 如果可能的话,那会有用。几乎就像你想的那样:
echo preg_replace('|<start_delim>([^<^]+)<end_delim>|e', 'strrev("$1")', $str);
此致
RBO