regex - vim 正则表达式和普通正则表达式有什么区别?

标签 regex linux vim

我注意到 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/

相关文章:

使用正则表达式搜索的 JavaScript 字符串

java - 解析特殊格式的字符串

vim - vim 中的代码段 - 任何选项都可以返回上一个参数?

vim - 使用 vim 重新排序方法

regex - 在bash中使用sed换行,正则表达式问题

mysql - 查找具有 case 句子结构的字符串 (UC lc $word)

用于读写和可执行权限的linux命令

swift - 如何检测 Homebrew 公式中的平台?

linux - 从属模式下类似于 mplayer 的命令行音频播放器

vim:注释/取消注释文件中包含字符串的所有行