regex - 为什么 vim 的正则表达式语法有两个单词边界?

标签 regex vim word-boundary

Javascript 的正则表达式语法只有一个词边界:\b .

Vim 的正则表达式语法有两个:\< (单词开头)和 \> (词尾)。

谁能给我一个搜索的例子,可以用 vim 风格的词边界来实现,但不能用 javascript 风格来实现?

或者,具有单个单词边界的正则表达式语法是否可以做同样多的事情,但具有开始和结束边界还有其他一些优势?

最佳答案

Vim 中使用的语法来自 vi,从 ex 获取它,从 ed 获取它,这是第一个真实世界的正则表达式实现之一。 (是的,那个时间线有漏洞。)

许多编程语言中使用的语法(包括 JavaScript)直接来自 Perl。

vi(以及后来的其他克隆)和 Perl(以及后来的 PCRE)都为 POSIX 标准添加了许多特性,但不幸的是,每个实现都遵循自己的路径。树的 Perl/JavaScript/PCRE 分支比 ed/sed/ex/vi/Vim 分支开始得晚很多。

所以我会像这样重新定义你的问题:

Why did Perl, JavaScript, and PCRE chose to have a single word boundary when older, more established, implementations had two?

关于regex - 为什么 vim 的正则表达式语法有两个单词边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33539548/

相关文章:

javascript - 正则表达式匹配两个常量之间的字符串部分,中间有新行

php - 为什么 preg_match_all 强制我提供第三个可选参数?

regex - 如何在 VIM 中使用正则表达式检测代码行

python - 正则表达式 - 用句点替换行首的所有空格

Java 正则表达式排序\b

bash - grep- 为什么反向引用周围必须有单词边界?

regex - 使用正则表达式匹配powershell中的括号

c# - 正则表达式与包含 4 个组的字符串不匹配

regex - 为什么 nextgroup 不匹配没有尾随空格的换行符?

c# - 正则表达式:加号之前的单词边界