use Regexp::Common; my @examples = qw/ (*********) (***(*)***) ((***)) (((***))) ((**)**(**)) (((()))) /; for( @examples ) { chomp; print "$_: "; print $& if $_ =~ $RE{balanced}{-parens=>'()'}; print "\n"; } __output__ (*********): (*********) (***(*)***): (***(*)***) ((***)): ((***)) (((***))): (((***))) ((**)**(**)): ((**)**(**)) (((()))): (((())))