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

Vladimir V. Perepelitsa inthrax на gmail.com
Пт Окт 24 05:39:10 PDT 2008


On Friday 24 October 2008 16:20:35 Dmitry E. Oboukhov wrote:
> On 11:31 Fri 24 Oct     , Maxim Vuets wrote:
>
> MV> On 10/23/08, Dmitry E. Oboukhov <unera на debian.org> wrote:
> >> на входе имеются такие данные
> >>
> >> $txt=<<eof;
> >> строка;строка;строка
> >> строка
> >> строка;строка
> >> строка;строка;строка;строка;строка;строка
> >> строка;строка;строка
> >> ...
> >> нужно одним регулярником преобразовать это в нечто вида:
> >>
> >> $1;$5;$4;$2
>
> MV> Было много буков, а что надо сделать я так и не понял.
> MV> Можно конкретный пример: входящая строка и исходящая
> MV> строка (или список)? Вот тогда и над черным ящиком будет
> MV> думать проще (:
>
> я вроде и много букав и входящую исходящую строки написал
>
> вот пример что на входе что на выходе
>
> вход:
>
> 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
>
> фишка в том что на входе не все поля присутствуют в некоторых строках
> (количество неопределено)
>
> сейчас работает нечто вроде такого кода (несколько упрощенно):
>
> $txt =~ s/.*/join ';', (split ';',$&)[0,4,3,1]/emg;
>
> но тут получается не регулярное выражение а функциональный код.
> а хочется именно регулярник :)

из меня хреновый регэкспописатель, но типа работает:
s{^([^;\n]+);?([^;\n]+)?;?([^;\n]+)?;?([^;\n]+)?;?([^;\n]+)?.*?$}{$1;$5;$4;
$2}mg;

Че-то сейчас туплю и не могу сообразить как убрать повторяющийся паттерн

-- 
Vladimir Perepelitsa aka Mons Anderson
<inthrax на gmail.com> / #99779956


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