Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Re: Parsing balanced parentheses

by I0 (Priest)
on Jul 24, 2006 at 04:53 UTC ( #563188=note: print w/replies, xml ) Need Help??

in reply to Parsing balanced parentheses

use strict; use warnings; use Data::Dumper; my $contents = qq( create item "xxx" { remove entry "}x{" add entry "yy" "xxx" { item1=xxxx, item2=xxxx, } add diffenent entry "}}xxx" { item1=xxx, item2=xxxx, item3=xxx add subitem { item1=xxx, item2=xxx, item3=xxx } add subitem { item1=xxx, item2=xxx, } } another type { item1=xxx } with "{{xxx" } ); (my $re=$contents)=~s/(({)|(})|"(\\.|[^"\\])*"|.)/@{[')','']}[!$3]\Q$1 +\E@{['(','']}[!$2]/gs; print Dumper(@$=eval{$contents=~/$re/}); die $@ if $@; $re=join"|",map{"\Q$_\E"}@$; print Dumper extract($contents); sub extract{ my $c=shift; my @r; while( $c =~ /(\S.*?)\s*(?:{($re)} *(.*)|$)/mg ){ my($h,$b,$t)=($1,$2,$3); push @r,$b?[$h,extract($b),$t||()]:$h; } return @r?[@r]:$c; }

Replies are listed 'Best First'.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://563188]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (3)
As of 2016-10-23 20:53 GMT
Find Nodes?
    Voting Booth?
    How many different varieties (color, size, etc) of socks do you have in your sock drawer?

    Results (302 votes). Check out past polls.