vim 的科学数字和十六进制和十进制数字的正则表达式在适用于 Perl 时会产生错误?

Regex for scientific number and hex and decimal numbers for vim produces error while works for Perl?

我正在尝试学习如何编写 vim 插件,并要求匹配一种语言允许使用的数字,并尝试用不同的颜色突出显示它,并以非常神奇的模式编写了以下正则表达式:

 syntax match cNumberGroup "\v\d+" 
 syntax match cNumberGroup "\v0x\x+"
 syntax match cNumberGroup "\v[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?"

第一个是十进制数。第二个十六进制数 第三个用于科学数字表示。

前两个工作正常,但最后一个不工作。我想知道为什么它不起作用,还有,是否有更好的方法来编写所有正则表达式以有效地覆盖所有三个数字系统。

谢谢。

只是在正则表达式中插入 \v(非常神奇)并不能使 Vim 的正则表达式语法与 Perl 兼容。正如@Carpetsmoker 已经评论的那样,:help perl-patterns 显示了差异。

对于您的示例,(?:...) 必须写成 \v%(...):

syntax match cNumberGroup "\v[+\-]?%(0|[1-9]\d*)%(\.\d*)?%([eE][+\-]?\d+)?"