如果我有一個像<start_delim>asdf<end_delim>
這樣的字符串,並且我想在分隔符之間使用字母數字字符串並使用正則表達式對其進行反轉,那麼我該怎麼做呢?反向字符串使用正則表達式
我自然的本能是使用類似preg_replace("<start_delim>([a-zA-Z0-9]+)<end_delim>", strrev($1), $str)
的東西,但是由於顯而易見的原因,這是行不通的。
如果我有一個像<start_delim>asdf<end_delim>
這樣的字符串,並且我想在分隔符之間使用字母數字字符串並使用正則表達式對其進行反轉,那麼我該怎麼做呢?反向字符串使用正則表達式
我自然的本能是使用類似preg_replace("<start_delim>([a-zA-Z0-9]+)<end_delim>", strrev($1), $str)
的東西,但是由於顯而易見的原因,這是行不通的。
你將不得不使用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);
以前的解決方案類似,但使用的λ:
$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";
有人在這會是一個評論指出,最好不要使用/ e修飾符,但如果可能的話 ,這將工作。幾乎完全像你想象的:使用`e`修改
echo preg_replace('|<start_delim>([^<^]+)<end_delim>|e', 'strrev("$1")', $str);
問候
RBO
+1我很高興建議人。 – NikiC 2011-01-19 18:01:35
@nikic你說得太快... http://stackoverflow.com/questions/4738798/reverse-string-using-regexes/4739241#4739241 – 2011-01-19 18:41:56