Yes. With oniguruma regex engine, which is built in in Ruby 1.9, and is installable on Ruby 1.8, you can do that. You name a subregex with (?<name>...)
or (?'name'...)
. Then you call a subregex with \g<name>
or \g'name'
within the same regex. So your regex translated to oniguruma regex will be:
re = %r{
(?<re>
\(
(?:
(?> [^()]+ )
|
\g<re>
)*
\)
)
}x
Also note that multi-byte string module in PHP >=5 uses oniguruma regex engine, so you will be able to do the same.
The manual for oniguruma is here.