Sen can bir düzenli ifade ile bunu - PCRE'nin, PHP tarafından kullanılan, özyinelemeli desenleri verir. PHP Manual bir example neredeyse tam olarak ne istediğinizi verir:
\(((?>[^()]+)|(?R))*\)
This matches any correctly parenthesised substring as long as it begins and ends with parentheses. If you want to ensure the entire string is balanced, allowing strings like
"wiggedy(wiggedy)(wiggedy(wack))", here's what I came up with:
^((?:[^()]|\((?1)\))*+)$
Burada daha fazla şaşırtmalı daha aydınlatıcı olabilir desen bir açıklama var:
^ Beginning of the string
( Start the "balanced substring" group (to be called recursively)
(?: Start the "minimal balanced substring" group
[^()] Minimal balanced substring is either a non-paren character
| or
\((?1)\) a set of parens containing a balanced substring
) Finish the "minimal balanced substring" group
* Our balanced substring is a maximal sequence of minimal
balanced substrings
+ Don't backtrack once we've matched a maximal sequence
) Finish the "balanced substring" pattern
$ End of the string
Regexes bu tür ile gelip verimlilik ve doğruluğu düşünceler çok sayıda bulunmaktadır. Dikkatli olun.