vim正则表达式:在模式中间与否定匹配

时间:2014-08-23 13:33:59

标签: regex vim

我正在尝试在vim中学习正则表达式,并且已经陷入了以下任务:

我想做一个匹配以下所有行的替代品 - 和类似的 - 除了包含Look aXXhead的那一行。类似地,我的意思是ahead之间的任何内容,XX除外。

Look ahead
Look aYhead
Look aXhead 
Look aXXhead    
Look aXXXhead   

如果它是相关的,我在尝试时抱有最大希望

:%s/Look a\(XX\)\@!head/*\0
:%s/Look a\(.*\&\(XX\)\@!\)head/*\0
由于Look ahead I pressume的零宽度,

仅匹配\(XX\)\@!

尝试

:%s/Look a\(XX\)\@!.*head/*\0

错过了"三倍X"线。

那么,它是如何完成的?

P.S。这是我关于堆栈交换的第一篇文章,所以如果有更好的方法或地点可以帮助和纠正我。

2 个答案:

答案 0 :(得分:2)

尝试使用此模式:

/\(Look aXXhead\)\@!\&Look a.*head/

它由部分组成:

  • \(Look aXXhead\)\@!

    匹配文件中的每个位置,但不是/Look aXXhead/

  • Look a.*head

    也匹配/Look aXXhead/

\&运算符告诉每个部分必须匹配在同一个位置

答案 1 :(得分:1)

怎么样:

/\vLook a(XXhead)@!.*head

或没有very magic

/Look a\(XXhead\)\@!.*head