gvim regexp用于嵌套括号

时间:2017-04-10 10:16:34

标签: regex vim

我的文件包含abc(de + fgh(2a + 2b))+ xyz()。我想写regexp(最好是vim)来得到像de + fgh(2a + 2b)+ xyz()这样的模式。

我尝试使用gvim regexp但是在匹配括号时,如果我使用贪婪选项,它将匹配abc(de + fgh(2a + 2b))+ xyz(对于非贪婪选项,它将与abc(de + fgh(2a + 2b')')+ xyz()匹配,如何与abc匹配(de + fgh(2a + 2b)' )'+ XYZ()。

此致 keerthan

2 个答案:

答案 0 :(得分:1)

我不会用正则表达式来做,假设你的光标处于BOL状态,只需执行:

%di(v0p

你将获得所需的输出。

将其翻译成英文,将第一个(..)组之间的内容与第一个(...)组之后的内容联系起来。

您可以使用:normal cmd或宏在多行上应用操作。

答案 1 :(得分:0)

小心!正则表达式无法处理任意数量的括号。如果你想这样做,你可能需要编写一个解析器。

那就是说,如果您只需要这个来处理特定情况: http://regexr.com/3fne0

在vim中这是:

%s/[^()]*(\([^()]*([^()]*)\))\(.*\)/\1\2/g