regex - Vim 在一个正则表达式中进行否定前瞻和否定后视

标签 regex vim

我正在尝试将这个正则表达式从 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 中的环视语法不同,并且您有不止一种使用正则表达式进行搜索的模式,我通常使用 nomagicvery magic
花点时间看看魔法模式的帮助::help /magic
编辑

现在它也包括 45 和 21

关于regex - Vim 在一个正则表达式中进行否定前瞻和否定后视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20409111/

上一篇:r - R中的平行k均值

下一篇:r - NA 的问题

相关文章:

Vim 使用 nerdtree 关闭缓冲区

vim - 如何同时使用vimclojure和SLIMV?

git - 有什么方法可以忽略 VIM 中的 ^M 回车?

linux - :wq! 结果为 E212:无法打开文件进行写入 按 ENTER 或键入命令继续

php - 为所有物理/化学/生物单位进行正则表达式匹配?

python - 在 Python 正则表达式中使用 ^ 匹配行首

regex - Oracle Regex 替换负前瞻

javascript - 正则表达式提取所有重复字符

php - 两个符号之间但不是该符号的三个之间的字符串的正则表达式

vim - 如何删除 Vim 中的大括号?