Perl嵌套括号表达式

时间:2016-03-15 00:28:29

标签: regex perl nested expression parentheses

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

text =( - (A +(B - C)))

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

由于

2 个答案:

答案 0 :(得分:2)

可以使用此(\(((?:[^()]++|(?1))*)\))完成,并且有几个 做到这一点的方法。

Formatted and tested:

 (                       # (1 start), Recursion code group
      \(                      # Opening (
      (                       # (2 start), Capture, inner core
           (?:                     # Cluster group
                [^()]++                 # Possesive, not parenth's
             |                        # or,
                (?1)                    # Recurse to group 1
           )*                      # End cluster, do 0 to many times
      )                       # (2 end)
      \)                      # Closing )
 )                       # (1 end)

输出

 **  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))  

答案 1 :(得分:1)

我认为不需要任何其他内容

use strict;
use warnings 'all';

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

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

print $result, "\n";

输出

-(A + (B - C))

该模式捕获从第一个左括号后到最后一个右括号之前的所有内容。从你的问题来看,我认为不需要检查字符串是否平衡