我注意到 vim 的替代正则表达式与其他正则表达式有点不同。它们有什么区别?
最佳答案
“正则表达式”真正定义的是算法,而不是语法。这意味着不同风格的正则表达式将使用不同的字符来表示同一事物;或者他们会在一些特殊字符前加上反斜杠,而其他字符则不会。它们通常仍会以相同的方式工作。
曾几何时,POSIX defined the Basic Regular Expression语法 (BRE),Vim 主要遵循它。不久之后,扩展正则表达式 (ERE) 语法提案也发布了。两者之间的主要区别在于 BRE 倾向于将更多字符视为文字 - “a” 是一个“a”,但“(”也是一个“(”,而不是特殊字符 - 因此涉及更多反斜杠赋予它们“特殊”的意义。
在此处的单独评论中讨论 Vim 和 Perl 之间的复杂差异很有用,但也值得一提 Vim 正则表达式与“公认”规范(您可能指的是 Perl。 ) 如上所述,它们的主要区别在于前面反斜杠的使用。
这里有一些明显的例子:
Perl Vim Explanation --------------------------- x? x\= Match 0 or 1 of x x+ x\+ Match 1 or more of x (xyz) \(xyz\) Use brackets to group matches x{n,m} x\{n,m} Match n to m of x x*? x\{-} Match 0 or 1 of x, non-greedy x+? x\{-1,} Match 1 or more of x, non-greedy \b \< \> Word boundaries $n \n Backreferences for previously grouped matches
这让您了解了最重要的差异。但是如果你正在做比基础更复杂的事情,我建议你总是假设 Vim-regex 将不同于 Perl-regex 或 Javascript-regex 并引用类似 Vim Regex website 的内容。 .
关于regex - vim 正则表达式和普通正则表达式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3864467/