2010-07-08 8 views
2

У меня есть строка, как это:Как изменить порядок двух слов в строке?

$a = "Mike , Tree "; 

Я хочу обратить его "Tree, Mike".

Есть ли какая-нибудь функция для этого?

+0

я не знаю, какой из них я могу принят ответ .. потому как ответ хороший ... – Tree

+0

ли изменился пробельные существенным? – Svante

+0

yes ................. – Tree

ответ

9

Используйте reverse функцию:

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

эй, это причудливая функция в perl ... мне нравится. –

+0

Этот пример кода не использует обратную функцию в скалярном контексте. – mob

+0

исправлено. спасибо. – miku

1

Если вы гарантировано ваша строка, которую вы хотите, чтобы быть полностью будут разделены запятыми, то я бы разделить строку на запятой, а затем пройти через массив это производит от длины до 0 и добавляет его в пустую строку.

10

Разделите строку на две строки, переверните их и присоедините к ним.

Или используйте регулярное выражение:

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

Лучше, чем Roque ответ с моей точки зрения, поскольку регулярное выражение позволяет вам больше контролировать, как справляться с дополнительным пространством. В вашем случае я бы точно сделал $ a = ~ s/(\ S +) \ s *, \ s * (\ S +)/\ 2, \ 1/g; – radius

+5

\ 1 и т. Д. На заменяемой стороне устарела и будет вызывать предупреждение; сделайте это вместо этого: '$ a = ~ s /(.+),(.+)/$ 2, $ 1/g;' – ysth

+0

Его хороший ответ – Tree

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 
Смежные вопросы