在 VIM 中使用正则表达式交换两个文本的正则表达式

Regex to swap two texts using regex in VIM

不是正则表达式专家。但是,在网上搜索了一下之后,我想到了这个表达式来交换文件中的两个文本:

%s/(\s*\(&\)\(.*\), \(.*\)\s*);/( , );/gc

我的初始文字:

read( &regVal.mAllBits, getAddr()+offset );

我想把它换成:

read( getAddr()+offset, regVal.mAllBits );

如上所示,要求是:

我在开头和结尾都有\s*来忽略白色space。但是,它的问题是,语句中右括号之前的白色 space 被添加到匹配 3 中。因此我得到的结果是:

read( getAddr()+offset , regVal.mAllBits );

请注意“,”前多出来的白色 space。我尝试了很多东西,但无法解决。 谁能帮我忽略正则表达式语句中模式匹配中的白色space?

如果你不想匹配空格,你必须使用\S而不是.,因为.会匹配任何字符,包括空格。正则表达式默认总是贪心的,所以会尽可能匹配。

%s/(\s*\(&\)\(.*\), \(\S*\)\s*);/( ,  );/gc