REGEX以反向打印每个单词

时间:2011-05-27 16:38:37

标签: php regex

有人可以帮我解决一个字符串中每个单词的正则表达式吗?

示例输入:

Hello how are you my friend?

所需的输出

olleH woh era uoy ym ?dneirf

我想在PHP中实现它。

4 个答案:

答案 0 :(得分:5)

这几乎可以满足您的需求。

如果距离不够近,请查看空间爆炸的Blender's solution

preg_replace_callback('/\b(\w+)\b/', function($match) {
    return strrev($match[1]);
}, $str);

CodePad

你可以使用普通的正则表达式(以及一些字符串函数)来反转文本,但它很难看......

$length = strlen($str);

echo preg_replace(
         '/' . str_repeat('(.)', $length) . '/s',
         '$' . join('$', range($length, 1)),
         $str
     );

CodePad

上面的代码示例仅供演示。请不要使用它:)

答案 1 :(得分:2)

纯正的正则表达式无法做到,抱歉。

这是一个可能正在运行的PHP脚本:

$exploded = explode(' ', $string);
$temp = array();

for ($i = 0; $i < count(exploded); $i++) {
  $temp[] = strrev(exploded[i]);
}

$temp = implode(' ', $temp);

答案 2 :(得分:0)

不是正则表达式,但这有效:

<?php

function reverseWords($text) {
    $words = explode(' ', $text);
    $c_words = count($words);
    $outtext = "";
    for ($i = 0; $i < $c_words; $i++) {
        if ($i !== 0) $outtext .= " ";
        $length = strlen($words[$i]);
        for ($p = $length-1; $p >= 0; $p--) {
            $outtext .= substr($words[$i], $p, 1);
            $start--;
        }
    }
    return $outtext;
}

echo reverseWords("This is a test.");

?>

https://ideone.com/WUtzJ

现在,我忘记了strrev(),所以这会缩短它。

修改

使用strrev()

<?php

function reverseWords($text) {
    $words = explode(' ', $text);
    $c_words = count($words);
    $outtext = "";
    for ($i = 0; $i < $c_words; $i++) {
        if ($i !== 0) $outtext .= " ";
        $outtext .= strrev($words[$i]);
    }
    return $outtext;
}

echo reverseWords("This is a test.");

?>

https://ideone.com/NT7A5

答案 3 :(得分:0)

如果没有正则表达式,这是非常无法实现的,我在这里看到了很多大量的解决方案,所以我想我会发布一个单行代码:

$rev = implode(' ', array_map('strrev', explode(' ', $string)));