2011-01-19 71 views
0

如果我有一个像<start_delim>asdf<end_delim>这样的字符串,并且我想在分隔符之间使用字母数字字符串并使用正则表达式对其进行反转,那么我该怎么做呢?反向字符串使用正则表达式

我自然的本能是使用类似preg_replace("<start_delim>([a-zA-Z0-9]+)<end_delim>", strrev($1), $str)的东西,但是由于显而易见的原因,这是行不通的。

回答

4

你将不得不使用preg_replace_callback

$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); 

http://codepad.org/xP2arFZk

+1

+1我很高兴建议人。 – NikiC 2011-01-19 18:01:35

+1

@nikic你说得太快... http://stackoverflow.com/questions/4738798/reverse-string-using-regexes/4739241#4739241 – 2011-01-19 18:41:56

0

以前的解决方案类似,但使用的λ:

$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"; 
-1

有人在这会是一个评论指出,最好不要使用/ e修饰符,但如果可能的话 ,这将工作。几乎完全像你想象的:使用`e`修改

echo preg_replace('|<start_delim>([^<^]+)<end_delim>|e', 'strrev("$1")', $str); 

问候

RBO