如何将否定(emacs 兼容)正则表达式限制为否定字符串

How to limit a negating (emacs-compatible) regex to the negated string

我正在寻找与“CVS”不匹配的正则表达式。 我不想使用任何无法转换为 Emacs 正则表达式的功能。

到目前为止我有(在 Python 语法中,因为我想在 regex101.com 上显示它):

(^[^C].*|^.[^V].*|^..[^S].*)

此正则表达式 匹配“CVS” - 目前一切顺利。不幸的是,它匹配“CVS and more”,但它应该匹配它。

如何调整我的正则表达式以匹配“CVS and anything after it”,但仍然不匹配“CVS”? (即如何使 regex101.com page 上的最后一个测试成功?)

我的理解是,您想要匹配不是以下行的每一行:

CVS

你的尝试已经不远了。

这里是 Python 语法中的正则表达式 regex101.com:

^(?:[^C\n]|C[^V\n]|CV[^S\n]|CVS.).*|^CV?$

下面是字符串读取语法中的 elisp 正则表达式:

"^\(?:[^C\n]\|C[^V\n]\|CV[^S\n]\|CVS.\).*\|^CV?$"

注意换行符。所以在字符串语法中它变成:

^\(?:[^C
]\|C[^V
]\|CV[^S
]\|CVS.\).*\|^CV?$

n.b。您可以使用 M-x re-builder 在 Emacs 中测试这些。