非常基本的问题,我正在尝试在Vim中编写一个正则表达式来匹配任何短语,"abc "
然后直接跟着除了之外的任何其他短语"defg"
.
我习惯于"[^defg]"
匹配除d,e,f或g之外的任何单个字符.
我的第一直觉是尝试/abc [^\(defg\)]
或者/abc [^\
两者都没有.
这是搜索字符串.
/abc \(defg\)\@!
您正在寻找的概念称为负面预测断言.在vim中尝试这个以获取更多信息:
:help \@!
之前或之后?
如果以'abc'开头的任何东西都没有(立即)后跟'defg',那么你需要bmdhacks的解决方案.
如果以"abc"开头的任何东西都没有(立即)以'defg'开头,那么你需要一个负面的后视:
/\%(defg\)\@这将匹配任何'abc'的出现,只要它不是'defgabc'的一部分.有关
:help \@详细信息,请参阅
如果你想匹配'abc',只要它不是'defg.*abc'的一部分,那么只需添加一个
.*
:/\%(defg.*\)\@仅在'defg'未发生的行上匹配'abc'是类似的:
/\%(defg.*\)\@虽然,如果您只是为了替换这样做,您可以通过组合
:v//
和使这更容易:s//
:%v/defg/s/abc //g 这将在所有不包含'defg'的行上用'
'代替'abc'.了解 :help :v
更多.