[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