PHP 中的正则表达式。获取一级括号之间的文本

and*_*990 6 php regex non-greedy parentheses

我在一个文本中有两种类型的字符串:

a(bc)de(fg)h

a(bcd(ef)g)h

我需要在第一级括号之间获取文本。在我的例子中,这是:

公元前

fg

bcd(ef)g

我尝试使用/\((.+)\)/带有 Ungreedy (U) 标志的下一个正则表达式:

公元前

fg

bcd(ef

没有它:

bc)de(fg)

bcd(ef)g

两种变体都不能满足我的需求。也许有人知道如何解决我的问题?

Rob*_*zie 2

这个问题几乎已经有了答案,但实现有点模糊。您可以使用不带 s 的接受答案中的逻辑~来获取此正则表达式:

\(((?:\[^\(\)\]++|(?R))*)\)
Run Code Online (Sandbox Code Playgroud)

使用此输出进行测试:

在此输入图像描述