2010-07-08 61 views
2

我有一個這樣的字符串:如何反轉字符串中兩個單詞的順序?

$a = "Mike , Tree "; 

我想將它反向"Tree, Mike"

有沒有什麼功能可以做到這一點?

+0

我不知道哪一個我可以接受的答案..因爲兩個答案都是好的... – Tree 2010-07-08 15:00:39

+0

改變的空白是否顯着? – Svante 2010-07-08 15:28:51

+0

是................. – Tree 2010-07-08 15:41:07

回答

9

使用reverse功能:

$reversed = join(",", reverse split(",", $string)); 
+0

嘿,這是一個奇特的功能...我喜歡。 – 2010-07-08 14:34:39

+0

此示例代碼未在標量上下文中使用反向函數。 – mob 2010-07-08 14:36:06

+0

已更正。謝謝。 – miku 2010-07-08 14:38:04

1

如果你保證要被逆轉將用逗號分隔的字符串,那麼我會在逗號分割字符串,然後再通過數組它從它的長度生成0並將其附加到空字符串。

10

將字符串拆分爲兩個字符串,將其翻轉並重新加入。

或者,使用正則表達式:

$a =~ s/(.+),(.+)/\2,\1/g; 
+0

從我的角度來看比Roque更好,因爲正則表達式允許您更多地控制如何處理額外的空間。在你的情況下,我會確實做$ a =〜s /(\ S +)\ s *,\ s *(\ S +)/ \ 2,\ 1/g; – radius 2010-07-08 14:40:07

+5

\ 1等在更換方面是長期棄用,並會觸發警告;這樣做:'$ a =〜s/(.+),((++)/$ 2,$ 1/g;' – ysth 2010-07-08 14:46:33

+0

其良好的答案 – Tree 2010-07-08 15:01:02

1

只是爲了您的問題。

$a =~ s/([A-Za-z]+)([^A-Za-z]+)([A-Za-z]+)/$3$2$1/; 

[[email protected] trunk]$ perl -E '$a = "Mike , Tree "; $a =~ s/([A-Za-z]+)([^A-Za-z]+)([A-Za-z]+)/$3$2$1/; say $a;' 
Tree , Mike 
相關問題