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