7

为什么你必须在他们的正则表达式引擎中转义一些元字符,而不是其他元字符?例如:

/foo[1-9]*  

按预期工作,但正则表达式

foo[1-9]+  

必须表示为

/foo[1-9]\+  

在 vim. 有人知道吗?

4

1 回答 1

25

这是因为 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 的各个方面。

这两段信息量很大!我希望我能把这一切都加粗。一些亮点,

  • Ken Thompsoned在 1971ed年写道。实际上是对qed.
  • Ken 在他的版本中添加了正则表达式,qed实际上是ed.
  • 受启发ed,1976 年威廉·乔伊(被称为比尔·乔伊)撰写了ex维基百科
  • 比尔乔伊在 1976 年vi为名为ex wikipedia的行编辑器编写了可视模式
  • grep受到特殊用途的qed启发ed
  • sed被实现为 qed 的许多脚本功能,这些功能在 Unix 上不受 ed 支持
  • sed影响了设计awk

所以 vi 正则表达式是ed在 1971 年编写的。它早于任何其他正则表达式风格。

于 2012-12-22T01:00:16.687 回答