擅长:python、mysql、java
<p>首先:不要使用解析器。<br/>
第二,如果您坚持并想了解<em>为什么</em>应该使用解析器,那么请看一下这种递归方法(它只适用于较新的<code>regex</code>模块):</p>
<pre><code>^[^()\n]+\([^()]*\)\s*
\{
(?:[^{}]*|(?R))+
\}
</code></pre>
<p>见<a href="https://regex101.com/r/rph0Rf/1/" rel="nofollow noreferrer"><strong>a demo on regex101.com</strong></a>。这将与<a href="https://regex101.com/r/rph0Rf/2" rel="nofollow noreferrer"><strong>comments that include curly braces</strong></a>中断。
</p><hr/>
在<code>Python</code>这将是
<pre><code>import regex as re
reg = re.compile(r"""^[^()\n]+\([^()]*\)\s*
\{
(?:[^{}]*|(?R))+
\}""", re.VERBOSE | re.MULTILINE)
for function in reg.finditer(string):
print(function.group(0))
</code></pre>