问题描述
|
有人可以帮我解决一个字符串中每个单词的正则表达式吗?
输入样例:
Hello how are you my friend?
期望的输出
olleH woh era uoy ym ?dneirf
我想在PHP中实现这一点。
解决方法
这几乎给您您想要的。
如果距离不够近,请查看Blender爆炸空间的解决方案。
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.\");
?>
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
, 如果没有正则表达式,这是极其琐碎的事情,而且我在这里看到了很多庞大的解决方案,所以我想我会发布单行代码:
$rev = implode(\' \',array_map(\'strrev\',explode(\' \',$string)));