Regex Perl嵌套括号表达式

Regex Perl嵌套括号表达式,regex,perl,nested,expression,parentheses,Regex,Perl,Nested,Expression,Parentheses,如何使用perl正则表达式提取最外层括号内的内容 文本=((A+(B-C))) 输出=-(A+(B-C)) 谢谢可以用这个(\(((((?:[^()]+++)(?1))*)\来完成它,有几个 如何做到这一点 输出 ** Grp 0 - ( pos 4 , len 16 ) (-(A + (B - C))) ** Grp 1 - ( pos 4 , len 16 ) (-(A + (B - C))) ** Grp 2 - ( pos 5 , len 14 ) -(

如何使用perl正则表达式提取最外层括号内的内容

文本=((A+(B-C)))

输出=-(A+(B-C))


谢谢

可以用这个
(\(((((?:[^()]+++)(?1))*)\
来完成它,有几个
如何做到这一点

输出

 **  Grp 0 -  ( pos 4 , len 16 ) 
(-(A + (B - C)))  
 **  Grp 1 -  ( pos 4 , len 16 ) 
(-(A + (B - C)))  
 **  Grp 2 -  ( pos 5 , len 14 ) 
-(A + (B - C))  

我看不出需要比这更多的东西

use strict;
use warnings 'all';

my $text = "(-(A + (B - C)))";

my ($result) = $text =~ / \( (.*) \) /x;

print $result, "\n";
输出
该模式捕获从第一个左括号之后到最后一个右括号之前的所有内容。从你的问题来看,我认为没有必要检查字符串是否平衡

我还没有测试它,但我希望以下速度更快,因为它只会在必须的时候尝试递归:
\([^()]*(?:\((?1)\)[^()]*)\)
@ikegami我认为
+
应该让它们成为same@ikegami-是的,它似乎比交替快30%。这种展开的循环会遇到递归。这是不必要的复杂。OP并没有要求测试字符串以确保括号是平衡的,只是要求最外层对中的字符串是平衡的extracted@ikegami-您展开的递归循环太棒了!谢谢你的提示!
use strict;
use warnings 'all';

my $text = "(-(A + (B - C)))";

my ($result) = $text =~ / \( (.*) \) /x;

print $result, "\n";
-(A + (B - C))