[Moscow.pm] parsing {string}{string} Regexp-Common etc.

Aleksander Gorohovski angel на feht.dgtu.donetsk.ua
Сб Июн 11 03:10:43 PDT 2011


On Sat, 11 Jun 2011 12:36:27 +0300, Динар Жамалиев wrote:

> Простите, не учел возможность присутствия цифр после скобок, вот так  
> кажется
> работает:
>
>     my @chanks;
>     my $str = "{bla1 {bl}a2} }123".
>             "{bla3 {b{la4} }123".
>             "{{bla5 {bla6} }bla7}".
>             "{{bla8 {bla9} }bla10}123";
>
>     $str =~ /^
>         ((?: \{.+?\}\d* )(?=\{))
>
>         (
>          (?: \{.+?\}\d*(?=\{) ) (?{ push @chanks, $2 if $2; })
>         )+
>
>         (\{.+?\}\d*\z)
>     /x;
>
>     print join "\n", $1, @chanks, $2 , $3;

Премного благодарен.

В первоначальном варианте я путался понять зачем нужен был выбор
push @chanks, $2 if $2; |  push @chanks, $2;
а теперь стало ясно, что не нужен.

Оч.классно получается.
Хотя не учитывается возможный вариант, например,
если в последнем фрагменте (или другом) будет:
	...
	{{bla8 {bla9} }{bla10}}123

то получится вывод из 2-х элементов
...
{{bla8{bla9}}
{bla10}}123

а должен 1:
...
{{bla8{bla9}}{bla10}}123


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