in reply to Re: getting a return code from a looping regular expression
in thread getting a return code from a looping regular expression
while s/[(][^()][)]//; is actually a syntax error. Also, that pattern only matches parenthesis with exactly one character between them.
Here's some working code for arbitrary parenthesized strings:
sub balanced { $_ = shift; while (s/[(][^()]*[)]//) {}; return 0 if /[()]/; return 1; }
Of course a real programmer uses a PDA to balance parenthesis. (;
sub balanced { my $string = shift; my $stack = 0; for my $index (0..length($string) - 1) { my $char = substr($string, $index, 1); if ($char eq '(') { $stack++; } elsif ($char eq ')') { $stack--; }
# Update: Ha! Thanks, BlaisePascal.
# A PDA that happily pops an empty
# stack isn't very useful. :)return 0 if $stack < 0; } return $stack ? 0 : 1; }
-Matt
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
RE: RE: Re: getting a return code from a looping regular expression
by BlaisePascal (Monk) on Aug 01, 2000 at 22:57 UTC |