If you want to find out whether parenthesis are balanced in a string, you do not need a complicated regexp. In fact, you could even do it without a regexp at all, but let me present you a solution with a simple regexp:
sub is_balanced {
my $_ = shift;
my $c = 0;
while (/([()])/g) {
if ($1 eq '(') {$c++; next}
return if --$c < 0;
}
$c == 0;
}
The trick is to keep a counter. Increase the counter by 1 each time you see a '(', decrement the counter by 1 each time you see a ')'. If the counter ever becomes less than 0, or if the counter isn't 0 when reaching the end of the string, the parens aren't balanced. Otherwise, they are. | [reply] [d/l] |