our $parens; my $re = qr{ ( \( (?{$parens++ if $parens >= 0}) | \) (?{$parens-- if $parens >= 0}) | . )* }x; my $this = 'a(bc(de)fg)h'; my $that = '(a(bc(de)fg)h'; my $other = 'a(bc(de)fg)h)'; my $bla = ')a(bc(de)fg)h)'; $parens = 0; print "this, $parens\n" if $this =~ /$re/; $parens = 0; print "that, $parens\n" if $that =~ /$re/; $parens = 0; print "other, $parens\n" if $other =~ /$re/; $parens = 0; print "bla, $parens\n" if $bla =~ /$re/;
Which prints:
this, 0 that, 1 other, -1 bla, -1
Specifically, -1 indicates that, at some point, an attempt was made to close parens that hadn't been opened. A positive number indicates how many unclosed left parens were encountered.
Thanks, Ilya.
In reply to Re: getting a return code from a looping regular expression
by splinky
in thread getting a return code from a looping regular expression
by princepawn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |