Обратная строка с использованием регулярных выражений - PullRequest
0 голосов
/ 19 января 2011

Если бы у меня была строка типа <start_delim>asdf<end_delim>, и я хотел взять буквенно-цифровую строку между разделителями и перевернуть ее с помощью регулярных выражений, как бы я поступил так?

Моим естественным инстинктом было что-то использоватькак preg_replace("<start_delim>([a-zA-Z0-9]+)<end_delim>", strrev($1), $str), но по понятным причинам это не сработало.

Ответы [ 3 ]

4 голосов
/ 19 января 2011

Вам придется использовать 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

0 голосов
/ 19 января 2011

Кто-то указал в комментарии, что лучше не использовать модификатор / e, но если возможно, это будет работать. Почти так, как вы думали:

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

Привет

БВУ

0 голосов
/ 19 января 2011

Аналогично предыдущим решениям, но с использованием лямбды:

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