abowley@krait:~$ (echo 'Madrid(Spain(Europe)' && echo 'Madrid(Spain(Europe))' && echo 'Madrid(Spain Europe))' && echo 'a(b(c))' && echo 'a (b (c) d (e) f)') | perl -mstrict -wpe 'BEGIN { $brackets = qr#\([^()]*(?:(??{$brackets})[^()]*)*\)# }; s#([^)]+?)($brackets)([^(]+)# ( my $s = $1 ) =~ tr/(/ /; ( my $e = $3 ) =~ tr/)/ /; $s . $2 . $e #ge;' Madrid Spain(Europe) Madrid(Spain(Europe)) Madrid(Spain Europe) a(b(c)) a (b (c) d (e) f)