有人可以帮我解决一个字符串中每个单词的正则表达式吗?
示例输入:
Hello how are you my friend?
所需的输出
olleH woh era uoy ym ?dneirf
我想在PHP中实现它。
答案 0 :(得分:5)
这几乎可以满足您的需求。
如果距离不够近,请查看空间爆炸的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
);
上面的代码示例仅供演示。请不要使用它:)
答案 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.");
?>
现在,我忘记了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.");
?>
答案 3 :(得分:0)
如果没有正则表达式,这是非常无法实现的,我在这里看到了很多大量的解决方案,所以我想我会发布一个单行代码:
$rev = implode(' ', array_map('strrev', explode(' ', $string)));