我有以下文字:
y=asin(pi*2*(vel_rot+(dan_int+didt)/2.));
我想要一个正则表达式捕获函数asin的参数,即在示例中它应匹配:
pi*2*(vel_rot+(dan_int+didt)/2.)
我的问题是我不知道如何跳过与我发现的左括号一样多的右括号
答案 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.)