8

我在制作适当的查找/替换正则表达式以在 Vim 中使用时遇到问题。

这是一些 SQL:

select avg(field_name1), avg(field_name2), avg(field_name3) from a_table

糟糕,我忘了给结果加上别名:

select avg(field_name1) field_name1,
avg(field_name2) field_name2, avg(field_name3) field_name3 from a_table

所以,在 Vim 中,我确信有一个方便的查找和替换来匹配任意[a-z]\+_[a-z]\+内括号,但我不知道如何在整个匹配之后放置该标记

4

2 回答 2

16

尝试以下操作:

:s/(\(.*\))/(\1) \1/g
于 2012-09-05T17:46:10.640 回答
6

将要在替换/替换中使用的文本分组,并使用,等\(\)在替换中引用这些反向引用。\1\2

用于[:alnum:]匹配字母数字字符:

:s/(\([[:alnum:]]\+_[[:alnum:]]\+\))/(\1) \1/g

要将任一正则表达式应用于整个文件,请使用:

:%s/(\([[:alnum:]]\+_[[:alnum:]]\+\))/(\1) \1/g

:help \1有关使用反向引用的更多详细信息,另请参阅。

于 2012-09-05T17:51:16.390 回答