Yours is a Frequently Asked Question. The answer to it can be found in the standard Perl documentation by using the command perldoc -q balanced, also known as:
Can I use Perl regular expressions to match balanced text?
Although Perl regular expressions are more powerful than
"mathematical" regular expressions because they feature
conveniences like backreferences ("\1" and its ilk),
they still aren't powerful enough--with the possible
exception of bizarre and experimental features in the
development-track releases of Perl. You still need to
use non-regex techniques to parse balanced text, such as
the text enclosed between matching parentheses or
braces, for example.
An elaborate subroutine (for 7-bit ASCII only) to pull
out balanced and possibly nested single chars, like "`"
and "'", "{"and "}", or "(" and ")" can be found in
http://www.perl.com/CPAN/authors/id/TOMC/scripts/pull_quot
+es.gz
The C::Scan module from CPAN contains such subs for
internaluse, but they are undocumented.
Further information can be found in perldoc -q How do I remove HTML which despite the name, is directly applicable to XML.
Regards,
Helgi Briem
helgi AT decode DOT is