为什么你必须在他们的正则表达式引擎中转义一些元字符,而不是其他元字符?例如:
/foo[1-9]*
按预期工作,但正则表达式
foo[1-9]+
必须表示为
/foo[1-9]\+
在 vim. 有人知道吗?
这是因为 vim (实际上是vi)早在 perl 之前就创建了自己的正则表达式风格。甚至 POSIX BRE 和 ERE 也出现在 vim wikipedia之后。他们仍然保持自己的风味,所以它是完全不同的。
为了使答案更加丰富,这里引用了ed
wiki的引述。
该编辑器最初是由 Ken Thompson于1971 年用 PDP-11/20 汇编程序编写的。ed 的许多特性都来自他的母校加州大学伯克利分校的 qed 3 Thompson 对 qed 非常熟悉,并在 CTSS 和 Multics 系统上重新实现了它。他的 qed 版本是第一个实现正则表达式的版本。尽管正则表达式是 ed 的一部分,但它们的实现远不如 qed 中的通用。
ed 的各个方面继续影响 ex,而 ex 又产生了 vi。非交互式 Unix 命令 grep 的灵感来自 qed 和后来的 ed 的常见特殊用途,其中命令g/re/p 表示全局搜索正则表达式 re 并打印包含它的行。Unix 流编辑器 sed 实现了 qed 的许多脚本功能,这些功能在 Unix 上不受 ed 支持。sed 反过来影响了编程语言 AWK 的设计——这启发了 Perl 的各个方面。
这两段信息量很大!我希望我能把这一切都加粗。一些亮点,
ed
在 1971ed
年写道。实际上是对qed
.qed
实际上是ed
.ed
,1976 年威廉·乔伊(被称为比尔·乔伊)撰写了ex
维基百科vi
为名为ex
wikipedia的行编辑器编写了可视模式grep
受到特殊用途的qed
启发ed
。sed
被实现为 qed 的许多脚本功能,这些功能在 Unix 上不受 ed 支持sed
影响了设计awk
。所以 vi 正则表达式是ed
在 1971 年编写的。它早于任何其他正则表达式风格。