Regular expression to match balanced parentheses

I want to add this answer for quickreference. Feel free to update.

.NET Regex using balancing groups.


Where c is used as the depth counter.

Demo at

  • 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 (?0).

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)

JavaScript  API :: XRegExp.matchRecursive

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 + quantifier.

Java: An interesting idea using forward references by @jaytea.

Reference – What does this regex mean?

  • – Recursive Regular Expressions
  • – Regular Expression Recursion

Leave a Comment