I want to add this answer for quickreference. Feel free to update.
.NET Regex using balancing groups.
c is used as the depth counter.
Demo at Regexstorm.com
- Stack Overflow: Using RegEx to balance match parenthesis
- Wes’ Puzzling Blog: Matching Balanced Constructs with .NET Regular Expressions
- Greg Reinacker’s Weblog: Nested Constructs in Regular Expressions
PCRE using a recursive pattern.
Demo at regex101; Or without alternation:
Demo at regex101; Or unrolled for performance:
Demo at regex101; The pattern is pasted at
(?R) which represents
Perl, PHP, Notepad++, R: perl=TRUE, Python: Regex package with
(?V1) for Perl behaviour.
Ruby using subexpression calls.
With Ruby 2.0
\g<0> can be used to call full pattern.
Demo at Rubular; Ruby 1.9 only supports capturing group recursion:
Demo at Rubular (atomic grouping since Ruby 1.9.3)
XRegExp.matchRecursive(str, '\\(', '\\)', 'g');
JS, Java and other regex flavors without recursion up to 2 levels of nesting:
Demo at regex101. Deeper nesting needs to be added to pattern.
To fail faster on unbalanced parenthesis drop the
Java: An interesting idea using forward references by @jaytea.
Reference – What does this regex mean?
- rexegg.com – Recursive Regular Expressions
- Regular-Expressions.info – Regular Expression Recursion