在一个正则表达式中,Vim负向前瞻和负面看后面

Pai*_*ige 4 regex vim

我试图将这个正则表达式从崇高文本转换为我可以在vim中使用的表达式: (?<![>\w\d])(42|45|21)\s(?!days)

我想匹配42,45和21,它们不会立即由<,一个单词字符或一个数字继续,并且后面没有单词days.

在示例中,我想在此找到42: This is a reference to chapter 42 in the book.

但不是这个: This is a reference to chapter <a href="#">42</a>.

或这个: This is a reference to chapter <a href="#">42 section 35</a>.

或这个: This book took 42 days to write.

我对正则表达式相当新,对于vim来说是新手,所以如果这是一个格式错误的正则表达式,请原谅我.

rbe*_*abe 8

得到它了

\([>]\)\@<!\<\(4[25]\|21\)\( days\)\@!
Run Code Online (Sandbox Code Playgroud)

要么

\v([>])@<!<(4[25]|21)( days)@!
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,语法环视是vim是不同的,你有一个以上的模式,正则表达式我通常使用搜索nomagicvery magic

花点时间看看魔法模式的帮助: :help /magic

编辑

现在它也包括45和21

  • 对于那些经历过艰难时期的人来说,这是一个细分:`\ v`表示"非常神奇"并像大多数其他软件一样制作vim正则表达式.`(模式)@ <!`是负面的lookbehind,而`(pattern)@!`是负向前瞻. (5认同)