为什么你必须在他们的正则表达式引擎中转义一些元字符,而不是其他元字符?例如:
/foo[1-9]*
按预期工作,但正则表达式
foo[1-9]+
必须表示为
/foo[1-9]\+
在 vim. 有人知道吗?
这是因为 vim (实际上是vi)早在 perl 之前就创建了自己的正则表达式风格。甚至 POSIX BRE 和 ERE 也出现在 vim wikipedia之后。他们仍然保持自己的风味,所以它是完全不同的。
为了使答案更加丰富,这里引用了edwiki的引述。
该编辑器最初是由 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 年编写的。它早于任何其他正则表达式风格。