[Moscow.pm] Парсинг вот такой вот структуры

Dmitry E. Oboukhov unera на debian.org
Ср Ноя 18 01:56:06 PST 2009


On 11:45 Tue 17 Nov     , Pavel wrote:
P> Всем БОЛЬШОЕ спасибо за помощь,
P> просмотрел предложенные модули, но пока больше всего понравилась идея с
P> регэкспом + подключил JSON,
P> и на данный момент получается что-то в этом роде:

P> $line =~ s/ID=(?=[^}]+=[^}]+})//g;
P> $line =~ s/NAME//g;
P> $line =~s/=/=>/g;
P> $line =~s/([\]}])/$1,/g;
P> eval '$struct = {' . $line . '};';

P> my $json_text   = $json->encode($struct);

P> {"TYPE2":[],"TYPE1":[{"One":"Один айди"},{"Two":"Айди номер
P> два"},{"Some":"Еще что-то"},{"Yeah":"Вот так вот"}]}


my $str = <<eof;
TYPE1=[
{ ID=One NAME="Один айди" }
{ ID=Two NAME="Айди номер два" }
{ ID=Some NAME="Еще что-то" }
{ ID=Yeah NAME="Вот так вот" }
]
TYPE2=[
]
eof

my %parsed =
    map { /ID=/ ? +{ m{ID=(\w+) NAME="(.*?)"}sg } : $_ }
        $str =~ /^(\w+)=\[(.*?)\]/sgm;

print Dumper(\%parsed);


ну если там разные пробелы встречаются между лексемами
 то вместо пробелов поставить \s+

-- 
... mpd is off

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera на debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: отсутствует
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20091118/7a5f4d6e/attachment.bin>


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