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我还有很多要学:)谢谢!