正则表达式匹配括号

匹配对称的括号
Matching Balanced Sets of Parentheses

对称的圆括号、方括号之类的符号匹配起来非常麻烦。在处理配置文件和源代码时,经常需要匹配对称的括号。例如,解析C语言代码时可能需要处理某个函数的所有参数。函数的参数包含在函数名称之后的括号里,而这些参数本身又有可能包含嵌套的函数调用或是算式中的括号。我们先不考虑嵌套的括号,你或许会想到「\bfoo\([^])*\」,但这行不通。

秉承C的光荣传统,我把示范函数命名为foo。表达式中的标记部分是用来捕获参数的。对于foo(2,4.0)和foo(somevar,3.7)之类的参数,这个表达式完全没问题。但是,它也可以匹配foo(bar(somevar),3.7),这可不是我们需要的。所以要用到比「[^)]*」更聪明的办法。

为了匹配括号部分,我们可以尝试下面的这些正则表达式:

1. \(.*\) 括号及括号内部的任何字符。
2. \([^)]*\) 从一个开括号到最近的闭括号。
3. \([^()]*\) 从一个开括号到最近的闭括号,但是不容许其中包含开括号。

图5-1显示了对一行简单代码应用这些表达式的结果。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部