任何人都可以请帮助我扭转字符串中每个单词的正则表达式吗?REGEX以反向打印每个单词
样品输入:
Hello how are you my friend?
所需的输出
olleH woh era uoy ym ?dneirf
我想在PHP来实现这一点。
任何人都可以请帮助我扭转字符串中每个单词的正则表达式吗?REGEX以反向打印每个单词
样品输入:
Hello how are you my friend?
所需的输出
olleH woh era uoy ym ?dneirf
我想在PHP来实现这一点。
这给你几乎你想要的。
如果不够近,请查看空间上爆炸的Blender's solution。
preg_replace_callback('/\b(\w+)\b/', function($match) {
return strrev($match[1]);
}, $str);
您可以使用普通的正则表达式(和一些字符串函数)扭转文本,但它是丑陋的...
$length = strlen($str);
echo preg_replace(
'/' . str_repeat('(.)', $length) . '/s',
'$' . join('$', range($length, 1)),
$str
);
上面的代码示例仅供演示。请不要使用它:)
这不能在纯正则表达式,对不起。
这里有一个可能是工作的PHP脚本:
$exploded = explode(' ', $string);
$temp = array();
for ($i = 0; $i < count(exploded); $i++) {
$temp[] = strrev(exploded[i]);
}
$temp = implode(' ', $temp);
不是正则表达式,但这个工程:
<?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.");
?>
现在,我忘了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.");
?>
这是非常琐碎实现无正则表达式,我在这里看到了很多大规模的解决方案,所以我以为我会张贴一行:
$rev = implode(' ', array_map('strrev', explode(' ', $string)));
是什么让你认为这只能使用正则表达式来完成? – kindall 2011-05-27 16:40:20
希望你们的人们必须正确阅读我的问题。我从来没有提到它只能用REGEX来完成。我想要一个使用REGEX的解决方案,因为它速度很快。顺便说一句,@ Teneff:我有点常识,strrev函数不会像我在问题中提到的那样完成这项工作。 – 2011-05-27 16:45:39
你是否有两种解决方案?我不确定正则表达式是否会在速度上赢得... – Blender 2011-05-27 16:58:45