我正在尝试将这个正则表达式从 sublime 文本转换为我可以在 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 也很陌生,所以如果这是一个格式错误的正则表达式,请原谅我。
最佳答案
知道了
\([>]\)\@<!\<\(4[25]\|21\)\( days\)\@!
或者
\v([>])@<!<(4[25]|21)( days)@!
如您所见,vim 中的环视语法不同,并且您有不止一种使用正则表达式进行搜索的模式,我通常使用
nomagic
和 very magic
花点时间看看魔法模式的帮助:
:help /magic
编辑
现在它也包括 45 和 21
关于regex - Vim 在一个正则表达式中进行否定前瞻和否定后视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20409111/