2012-02-19 127 views
2

在这个简单的代码:正则表达式(VIM)星号代替

char **s = NULL; 
char **s1 = NULL; 

我想用 “* S” 代替 “** S”

的结果应该是:

char *s = NULL; 
char **s1 = NULL; 

但如果我尝试:

%s/\<\*\*s\>/\*s/g 

更换故障。 如果尝试这个办法:

%s/\*\*s/\*s/g 

结果是:

char *s = NULL; 
char *s1 = NULL; 

更换succeded,也有 “** S1” 被替换

为什么第一种方法失败?

+0

为什么第一个有'\ <' and '\>'? – FakeRainBrigand 2012-02-19 18:03:16

+1

完全匹配http://vim.wikia.com/wiki/Search_and_replace – 2012-02-19 18:05:12

+1

顺便说一句,这是一个工作。 '%s/\ ** s \ s/* s /'您的第二个匹配,因为您没有指定在“s”之后出现的内容。 ' – FakeRainBrigand 2012-02-19 18:06:08

回答

2

在vim正则表达式中,\<表示字边界。空格和星号之间没有字边界—任何一个字都不是—的一部分,所以\<\*不匹配。你需要这个:

%s/\*\*s\>/\*s/g 

这解决了问题,而s后仍保留字边界(从而不匹配*s1)。 (\<\>经常成对用来匹配整个单词,但它们不一定非要使用)。