使用正则表达式捕获匹配括号序列的内容

时间:2016-09-15 22:50:11

标签: regex

我有以下文字:

y=asin(pi*2*(vel_rot+(dan_int+didt)/2.));

我想要一个正则表达式捕获函数asin的参数,即在示例中它应匹配:

pi*2*(vel_rot+(dan_int+didt)/2.)

我的问题是我不知道如何跳过与我发现的左括号一样多的右括号

1 个答案:

答案 0 :(得分:2)

使用支持递归的PCRE(或Perl)样式引擎 或者,您可以使用Dot-Nets计数组来导航嵌套。

这是前者。

y=asin(\(((?:[^()]++|(?1))*)\))

解释

 y=asin
 (                       # (1 start), Recursion code group
      \(
      (                       # (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)
      \)
 )                       # (1 end)

输出

 **  Grp 0 -  ( pos 0 , len 40 ) 
y=asin(pi*2*(vel_rot+(dan_int+didt)/2.))  
 **  Grp 1 -  ( pos 6 , len 34 ) 
(pi*2*(vel_rot+(dan_int+didt)/2.))  
 **  Grp 2 -  ( pos 7 , len 32 ) 
pi*2*(vel_rot+(dan_int+didt)/2.)