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

Regex 用正则表达式捕获匹配括号序列的内容,regex,Regex,我有以下案文: y=asin(pi*2*(vel_rot+(dan_int+didt)/2.)); 我想要一个正则表达式,它捕获函数asin的参数,也就是说,在本例中,它应该匹配: pi*2*(vel_rot+(dan_int+didt)/2.) 我的问题是,我不知道如何跳过尽可能多的右括号和右括号,我发现使用支持递归的PCRE(或Perl)风格的引擎。 或者,您可以使用点网计数组来导航嵌套 这是前者 y=asin(\((((?:[^()])+++(?)*)\) 解释 y=asin (

我有以下案文:

y=asin(pi*2*(vel_rot+(dan_int+didt)/2.));
我想要一个正则表达式,它捕获函数asin的参数,也就是说,在本例中,它应该匹配:

pi*2*(vel_rot+(dan_int+didt)/2.)
我的问题是,我不知道如何跳过尽可能多的右括号和右括号,我发现使用支持递归的PCRE(或Perl)风格的引擎。
或者,您可以使用点网计数组来导航嵌套

这是前者

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

解释

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

如果您使用的是perl,那么y=asin[(](.*)[)如何?您可以捕获括号的内容。这是否发生在一行中?如果发生在周围的上下文中,括号可能不匹配。平衡括号是纯正则表达式无法解决的问题的典型示例。有些语言支持扩展的正则表达式,允许这样做,但是有什么原因必须用正则表达式来实现吗?一个非常简单的循环和计数器将是一个简单而有效的解决方案,可以实现您的目标。@JimLewis我同意。尽管有一些编辑器提供了只接受正则表达式的查找/替换工具。使用正则表达式可以节省我实现某些东西的时间else@Andres很好的一点…有时候你只需要使用正则表达式,所以知道如何使用正则表达式很好。