2010-07-08 36 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 
相关问题