正则表达式(vim)星号替换

时间:2012-02-19 17:58:30

标签: regex

在这个简单的代码中:

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; 

替换成功,但也替换了“** s1”

为什么第一种方法失败?

1 个答案:

答案 0 :(得分:2)

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

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

解决了这个问题,同时仍然保留s之后的字边界(以便不匹配*s1)。 (\<\>经常成对使用以匹配整个单词,但它们不一定是。可以使用其中任何一个。)