Perl 嵌套括号表达式

use*_*827 0 regex perl expression nested parentheses

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

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

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

谢谢

小智 5

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

格式化并测试:

 (                       # (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)
Run Code Online (Sandbox Code Playgroud)

输出

 **  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))  
Run Code Online (Sandbox Code Playgroud)

  • 我还没有测试过它,但我希望以下更快,因为它只在必须时尝试递归: `\( ( [^()]* (?: \( (?1) \) [^() ]* )* ) \)` (2认同)