[Moscow.pm] parsing {string}{string} Regexp-Common etc.
Ivan Petrov
i.petro.77.00 на gmail.com
Сб Июн 11 07:37:01 PDT 2011
> вариант не срабатывает со строкой
> my $str = "{bla1 {bl}a2} }123".
> "{bla3 {b{la4} }123".
> "{{bla5 {bla6} }bla7}".
> "{{bla8 {bla9} }{bla10}}123".
> "{{bla8 {bla9} }bla10}123";
> результат :
ну если чисто просто "сделать", то тогда вот такой вариант видимо
окончательный (если еще чего недопонятого не всплывет):
$ cat test.pl
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
my $str =
'{any symbol}{any sy{}mbol}1any {ss{aaa}s { }y}4,any {sym{bol{} }}4' .
'{any symbol}{any sy{}mbol}1any {sy{aa}m{b{}ol{}}5}4,{any {sym{bol{} }}4'.
"{bla1 {bl}a2} }123".
"{bla3 {b{la4} }123".
"{{bla5 {bla6} }bla7}".
"{{bla8 {bla9} }{bla10}}123".
"{{bla8 {bla9} }bla10}123";
my @items =
$str =~ /( \{ (?>[^{}]*) (?:\} |(?: (?1) (?>[^{}]*) )+ \}) \d* )/gx;
print Dumper \@items;
$ perl test.pl
$VAR1 = [
'{any symbol}',
'{any sy{}mbol}1',
'{ss{aaa}s { }y}4',
'{sym{bol{} }}4',
'{any symbol}',
'{any sy{}mbol}1',
'{sy{aa}m{b{}ol{}}5}4',
'{any {sym{bol{} }}4{bla1 {bl}a2} }123',
'{b{la4} }123',
'{{bla5 {bla6} }bla7}',
'{{bla8 {bla9} }{bla10}}123',
'{{bla8 {bla9} }bla10}123'
];
Только у автора perl5.8, надо глядеть что у него там было для
рекурсивных выражений. У меня где-то книжка Ларри Уолла валялась, там
как раз был perl5.8, МНЕ КАЖЕТСЯ, что он там разбирал рекурсии в
регулярниках. но я могу ошибаться.
PS: ЕМНИП, то применение кода для генерации последующих частей
регулярника тоже в perl5.10 появилось, (?{}) или (??{}) - кто-то из
них точно в 5.10 появлялся и отсутствовал в 5.8 (это о другом
предложенном варианте с push'ами внутри регулярок)
Подробная информация о списке рассылки Moscow-pm