1

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

preg_match('#\(([^)]*)\)#', $subject, $matches);

我得到整个表达式$matches[0]和括号之间的部分$matches[1]

但如果我有$subject = 'test (with (nested) parenthesis)';它会返回(当然)'with (nested'而不是'with (nested) parenthesis'. 如何修改正则表达式以获得预期结果?

4

2 回答 2

2

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

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

正则表达式101演示

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

于 2013-09-04T13:07:26.627 回答
0

替换[^)]*.*

preg_match('#\((.*)\)#', $subject, $matches);
于 2013-09-04T13:05:39.510 回答