是否有机制可以使用正则表达式替换所有内容,但保留".*"
匹配的内容?
如果这不是正则表达式的一部分,但在某些编辑中是可行的,请相应说明。
答案 0 :(得分:3)
假设您希望将“foo”与空格中的括号分开,然后用括号括起整个内容:
:%s/foo\(.*\)/(foo \1)/g
因为\1
代表第一个括号中的文本。如果您有另一个括号分组等,则可以使用\2
鉴于你有
fooMOO
你最终得到:
(foo MOO)
答案 1 :(得分:1)
您可以在替换模式中使用反向引用:
%s/foo(\(.*\))/foo \1/g
在此模式中,未转义的括号与文本中的实际括号匹配,而转义的括号则用作捕获括号。 \ 1是反向引用,它指的是在正则表达式中第一组捕获括号内匹配的所有内容。请注意,如果您在一行上可能有多个函数调用,则可能需要限制匹配的字符数。如果参数列表中没有关闭括号的危险foo()(例如,在字符串中)那么你可能希望通过不匹配括号来做到这一点:
%s/foo(\([^)]\))/foo \1/g
如果在参数列表中存在紧密括号的危险,那么事情会变得复杂。