为什么 vim 的正则表达式语法有两个单词边界?
why does vim's regex syntax have two word boundaries?
Javascript 的正则表达式语法只有一个单词边界:\b
.
Vim 的正则表达式语法有两个:\<
(单词开头)和 \>
(单词结尾)。
谁能给我一个可以用 vim 样式词边界实现但不能用 javascript 样式实现的搜索示例?
或者说只有一个单词边界的正则表达式语法也可以做同样的事情,但是有开始和结束边界还有其他一些优势吗?
Vim 中使用的语法来自 vi,它从 ex 中获取,而 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?
Javascript 的正则表达式语法只有一个单词边界:\b
.
Vim 的正则表达式语法有两个:\<
(单词开头)和 \>
(单词结尾)。
谁能给我一个可以用 vim 样式词边界实现但不能用 javascript 样式实现的搜索示例?
或者说只有一个单词边界的正则表达式语法也可以做同样的事情,但是有开始和结束边界还有其他一些优势吗?
Vim 中使用的语法来自 vi,它从 ex 中获取,而 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?