0

是否有使用正则表达式替换所有的机制,但保留匹配的内容".*"

如果这不是正则表达式的一部分,但在某些编辑器中是可能的,请相应说明。

4

2 回答 2

3

假设您希望用空格将“foo”与括号中的内容分开,然后用括号将整个内容括起来:

:%s/foo\(.*\)/(foo \1)/g

其中\1代表第一个括号中的文本。\2如果您有另一个括号分组等,则可以使用。

鉴于你有 fooMOO

你最终会得到: (foo MOO)

于 2012-07-14T22:57:30.877 回答
1

您可以在替换模式中使用反向引用:

%s/foo(\(.*\))/foo \1/g

在此模式中,未转义的括号与文本中的实际括号匹配,而转义的括号充当捕获括号。\1 是反向引用,它指的是在正则表达式中的第一组捕获括号内匹配的所有内容。请注意,如果您可能在一行中有多个函数调用,您可能希望限制匹配的字符数。如果在 foo() 的参数列表中没有右括号(例如,在字符串中),那么您可能希望通过不匹配右括号来做到这一点:

%s/foo(\([^)]\))/foo \1/g

如果在参数列表中存在右括号的危险,那么事情就会变得复杂。

于 2012-07-14T22:57:40.187 回答