Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: regex to parse (nested) parenthesis delimited string?

by imp (Priest)
on Feb 06, 2007 at 16:45 UTC ( #598583=note: print w/ replies, xml ) Need Help??


in reply to regex to parse (nested) parenthesis delimited string?

Text::Balanced handles this nicely.

use strict; use warnings; use Text::Balanced qw(extract_bracketed); my $text = '(aaa) (bbb (ccc( ddd) eee) (fff)' ; my @tokens = extract_bracketed($text, '()'); print "$_\n" for @tokens; # Output: #(aaa) # (bbb (ccc( ddd) eee) (fff)


Comment on Re: regex to parse (nested) parenthesis delimited string?
Download Code
Re^2: regex to parse (nested) parenthesis delimited string?
by varian (Chaplain) on Feb 06, 2007 at 17:02 UTC
    Thanks all for the feedback.

    Indeed Text::Balanced might be a better solution although the suggested code fails to recognize '(fff)' as a separate, third, item. (probably because the parenthesis have an unbalanced nested parenthesis)

      Garbage in.. :)
      probably because the parenthesis have an unbalanced nested parenthesis
      Having unbalanced nested parenthesis invalidates your question. You asked for the following:
      input: '(aaa) (bbb (ccc( ddd) eee) (fff)' output: '(aaa)' '(bbb (ccc( ddd) eee)' '(fff)'
      but the unbalancing could have been resolved as in imp's answer, or alternatively as follows:
      input: '(aaa) (bbb (ccc( ddd) eee) (fff)' output: '(aaa)' '(bbb' '(ccc( ddd) eee)' '(fff)'
      As a matter of fact, I would understand either taking them all like imp (i.e. assuming that the missing parenthesis are all in the end) or this last one (i.e. assuming that the missing parentheses close the littlest possible group), while I don't see a generalisation rule for your choice.

      Flavio
      perl -ple'$_=reverse' <<<ti.xittelop@oivalf

      Don't fool yourself.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (8)
As of 2014-09-17 16:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (91 votes), past polls