在VIM中使用regex交换两个文本的Regex。

问题描述 投票:0回答:1

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

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

我的初始文本

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

我想把它换成:

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

如上图所示,要求是:

  • 忽略每个文本之间的可选空白处
  • 去掉第一个文字前面的&。

我让开头和结尾的\s*忽略白色空间。但是,它的问题是,语句中结尾括号前的空白会被添加到匹配3中。因此,我得到的结果是。

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

请注意','前有额外的空白。我尝试了很多方法,但无法解决这个问题。有谁能帮助我忽略我的regex语句中模式匹配中的空白?

regex vim swap
1个回答
1
投票

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

%s/(\s*\(&\)\(.*\), \(\S*\)\s*);/( \3, \2 );/gc
© www.soinside.com 2019 - 2024. All rights reserved.