我试图学习如何编写vim插件,并且需要匹配语言允许使用的数字并试图用不同的颜色突出显示它,并在非常神奇的模式下编写以下正则表达式:
syntax match cNumberGroup "\v\d+"
syntax match cNumberGroup "\v0x\x+"
syntax match cNumberGroup "\v[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?"
第一个是十进制数。第二个是十六进制数 第三个是科学数字表示。
前两个工作正常,但最后一个工作不正常。我想知道为什么它不起作用,还有,是否有更好的方法来编写所有正则表达式以有效地覆盖所有三个数字系统。
感谢。
答案 0 :(得分:3)
从正则表达式中删除\v
(非常神奇)并不会使Vim的正则表达式语法与Perl兼容。正如@Carpetsmoker已经评论过,:help perl-patterns
显示了差异。
对于您的示例,(?:...)
必须写为\v%(...)
:
syntax match cNumberGroup "\v[+\-]?%(0|[1-9]\d*)%(\.\d*)?%([eE][+\-]?\d+)?"