[Moscow.pm] Регулярник без /e

Maxim Vuets maxim.vuets на gmail.com
Пт Окт 24 12:19:04 PDT 2008


On 10/24/08, Dmitry E. Oboukhov <unera на debian.org> wrote:
> я вроде и много букав и входящую исходящую строки написал
>
> вот пример что на входе что на выходе
>
> вход:
>
> 1
> 1;2
> 1;2;3
> 1;2;3;4;5;6;7;8;9;10
> тут;не;обязательно;цифры
> а иногда и предложения;или несколько предложений
> все разделено точками с запятой
> 2;3;5
>
> на выходе надо получить регулярником что-то вида $1;$5;$4;$2
> то есть для данного примера будет так:
>
> 1;;;
> 1;;;2
> 1;;;2
> 1;5;4;2
> тут;;цифры;не
> а иногда и предложения;;;или несколько предложений
> все разделено точками с запятой;;;
> 2;;;3
>
> то есть строку бьем на поля разделенные точками с запятой
> а потом из разбитых собираем $1;$5;$4;$2

Теперь понятно. Вот аналогичный вашему коду пример,
но без кода в регулярнике (регулярник тут как таковой
и вовсе не нужен):

$ perl -ne 'chomp; $\="\n"; print join ";", (split /;/)[0,4,3,1]' <input
1;;;
1;;;2
1;;;2
1;5;4;2
тут;;цифры;не
а иногда и предложения;;;или несколько предложений
все разделено точками с запятой;;;
2;;;3

По-поводу ";" на хвосте -- на пустой желудок ничего
красивого не придумалось (: разве что влоб:

$ perl -pe 'chomp; $\="\n"; $_ = join ";", (split /;/)[0,4,3,1];
s/;+$//' <input
1
1;;;2
1;;;2
1;5;4;2
тут;;цифры;не
а иногда и предложения;;;или несколько предложений
все разделено точками с запятой
2;;;3


-- 
 .  Hoc est simplicissimum!
..: maxim.vuets.name


Подробная информация о списке рассылки Moscow-pm