Php 带嵌套Parethes的Parethes之间的匹配表达式

Php 带嵌套Parethes的Parethes之间的匹配表达式,php,regex,preg-match,Php,Regex,Preg Match,只要没有嵌套的括号,就很容易使用正则表达式匹配括号之间的文本。我用 preg_match('#\(([^)]*)\)#', $subject, $matches); 我用$matches[0]得到整个表达式,括号之间的部分用$matches[1]得到 但是如果我有$subject='test(带(嵌套的)括号)'它将返回(当然)带有(嵌套的“”的”,而不是带有(嵌套的)括号的“”。我需要如何修改正则表达式以获得预期的结果?将[^)]*替换为*: preg_match('#\((.*)\)#',

只要没有嵌套的括号,就很容易使用正则表达式匹配括号之间的文本。我用

preg_match('#\(([^)]*)\)#', $subject, $matches);
我用
$matches[0]
得到整个表达式,括号之间的部分用
$matches[1]
得到

但是如果我有
$subject='test(带(嵌套的)括号)'
它将返回(当然)带有(嵌套的“”的
”,而不是带有(嵌套的)括号的“
。我需要如何修改正则表达式以获得预期的结果?

[^)]*
替换为
*

preg_match('#\((.*)\)#', $subject, $matches);

您可以使用递归正则表达式:

\(((?:[^()]+|\((?1)\))+)\)


(?1)
匹配第一个捕获组。

非常感谢,您真的掌握了正则表达式@LorenzMeyer哈哈,不,我相信关于regex我还有很多要学:)谢谢!