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