正则表达式的历史
04月 8, 2009
只能大概的把书上内容列一下了。
最初可以追溯到20世纪40年代,有两个神经生理学家建立了一个神经系统的模型。到了多年以后,数学家Stephen Kleene 用代数方法描述了这个模型,并称之为regular sets。并且他设计了一种简单的记号方法来表达regular sets,叫他们为regular expressions。
之后正则表达式被广泛的研究应用。例如Ken Thompson 的qed。
Grep
- 支持*,但是不支持+和?。
- capturing metacharacters是\(⋯\)
- 不支持alternation。
- 括号只能用来capturing匹配的文本。
EGrep
- 不仅支持+和?,还可以应用到被括号围着的表达式。
把各种不同的正则表达式flavor归结为两种,Basic Regular Expressions (BREs), and Extended Regular Expressions (EREs)。
| Regex feature | BREs | EREs |
| dot, ^, $, [⋯], [^⋯] | √ | √ |
| “any number” quantifier | * | * |
| + and ? quantifiers | + ? | |
| range quantifier | \{min,max\} | {min,max} |
| grouping | \(⋯\) | (⋯) |
| can apply quantifiers to parentheses | √ | √ |
| backreferences | \1 through \9 | |
| alternation | √ |
1986年,Henry Spencer 用C写了正则表达式库。接着Larry Wall发明了Perl,一版又一版的改进了正则表达式,加了一坨特性。
还要注意,每种语言提供的正则表达式有不同的flavor。
每种不同语言有不同的方式来实现正则表达式:集成的(integrated)、过程式的(procedural)和面向对象式的(object-oriented)。
集成的代表是Perl。
优点是简化了程序员的工作,因为它隐藏了一些机制,例如准备正则表达式,建立匹配,应用正则表达式,然后得到结果。
隐藏这些细节也有不利之处,在一些情况下,导致效率低下,处理不灵活。
No comments yet