任何人都可以請幫助我扭轉字符串中每個單詞的正則表達式嗎?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