擅长:python、mysql、java
<p>正如在评论中所说,<code>^(?:a(?=a*(\1?+b)))+\1$</code>允许使用广泛的regex功能匹配这种平衡的结构。你知道吗</p>
<p><a href="https://regex101.com/r/CCEssq/1" rel="nofollow noreferrer">Demo</a></p>
<p>完整解释<a href="https://stackoverflow.com/a/3644267/8767753">here</a>。你知道吗</p>
<p>也就是说,如果要列出与平衡结构匹配的所有重叠子字符串,可以使用<code>(?=((?:a(?=a*(\2?+b)))+\2))</code>:</p>
<pre><code>(?= # Using a lookahead allows to restart matching even if a match has already been found, as a lookaround doesn't "consume" its content.
( # Using a capturing group allows to retrieve the match.
(?:a(?=a*(\2?+b)))+\2) # As an outer capturing group has been defined, thus numbered 1, we rewrite the inner part using the proper group 2.
)
)
</code></pre>
<p><a href="https://regex101.com/r/CCEssq/3" rel="nofollow noreferrer">Demo</a></p>