为什么你必须在他们的正则表达式引擎中逃避一些元字符,而不是其他元字符?例如:
/foo[1-9]*
按预期工作,但正则表达式
foo[1-9]+
必须表示为
/foo[1-9]\+
在vim中。有人知道吗?
答案 0 :(得分:23)
这是因为vim(实际上是 vi )在perl之前很久就创建了自己的正则表达式。甚至POSIX BRE和ERE都来自vim wikipedia 。他们仍然保持自己的味道,所以它是完全不同的。
为了使答案更加充实,这里引用ed
's wiki。
编辑最初是由Ken Thompson在 1971 的PDP-11/20汇编程序中编写的。 ed的许多特征来自他的母校加州大学伯克利分校的{qed 3汤普森非常熟悉qed,并在CTSS和Multics系统上重新实现了它。 他的qed版本是第一个实现正则表达式的。 虽然正则表达式是ed的一部分,但它们的实现远不如qed中的实现。
ed的各个方面继续影响前,反过来产生了vi 。非交互式Unix命令grep的灵感来自qed和后来编辑的常见特殊用法,其中命令 g / re / p表示全局搜索正则表达式re并打印包含它的行。 Unix流编辑器,sed实现了许多在Unix上不受ed支持的qed脚本功能。反过来,sed影响了编程语言AWK的设计 - 这启发了Perl的各个方面。
这两段有很多信息!我希望我能大胆一点。一些亮点,
ed
。ed
实际上是qed
的重新演绎。 qed
版本中添加了正则表达式,实际上是ed
。ed
的启发,1976年William Joy(称为Bill Joy)写了ex
wikipedia vi
作为名为ex
wikipedia grep
受到qed
及以后ed
的特殊用途的启发。sed
实现了许多qed的脚本功能,而Unix上的ed不支持sed
影响了awk
。所以vi正则表达式出现在ed
中,写于1971年。它早在任何其他正则表达式之前。