我正在尝试在vim中学习正则表达式,并且已经陷入了以下任务:
我想做一个匹配以下所有行的替代品 - 和类似的 - 除了包含Look aXXhead
的那一行。类似地,我的意思是a
和head
之间的任何内容,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。这是我关于堆栈交换的第一篇文章,所以如果有更好的方法或地点可以帮助和纠正我。
答案 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