介绍
正则表达式 (Regular expression)是一种描述字符串匹配模式的工具,是一门跨语言的通用技术,主要用于对文本进行校验、查询、替换操作。
概念:它对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。
历史
正则表达式的出现分为两个阶段:现有数学理论,后有工程实践
一、数学抽象
正则表达式最早来源于神经生理学研究,20世纪40年代,沃伦·麦卡洛克和沃尔特·皮茨 试图用数学来描述神经元的工作方式,建立了早期神经网络模型。
1956年,一位名叫斯蒂芬·克莱尼(Stephen Kleene)的数学家在麦卡洛克和皮茨早期工作的基础上,发表了一篇题为《神经网络中的事件表示》的论文,该论文引入了正则表达式的概念。正则表达式是用来描述他所称的"正则集代数"的表达式,因此得名"正则表达式"。
二、工程实践
60年代,肯尼斯·蓝·汤普森(Kenneth Lane Thompson)发现克莱尼 的研究成果可以用于文本模式匹配,所以将其用于早期的计算搜索算法研究中,并将其应用在UNIX的qed编辑器中。
从qed开始,正则表达式在计算机系统影响快速扩大,在极多应用中都有对应支持,如:Python、Java、JavaScript、PHP、Go、Shell、编辑器(VS Code、Vim)、数据库等。
扩展
正则表达式的正则来源于形式语言与自动机理论,应该理解为:能被有限自动机识别的语言,最早是描述正则语言的一种代数表示方法。
在形式语言中有以下基础概念:
- 正则语言------能被有限自动机识别
- 正则文法------产生正则语言的文法
- 正则表达式------描述正则语言的表达式
其中正则文法⇔有限自动机⇔正则表达式