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很好的一点…有时候你只需要使用正则表达式,所以知道如何使用正则表达式很好。