简介
正则表达式(英语:Regular expression,常简写为regex、regexp或RE),又称规律表达式、正规表示式、正规表示法、规则运算式、常规表示法,是计算机科学概念,用简单字串来描述、匹配文中全部符合指定格式的字串,现在很多文本编辑器都支援用正则表达式搜寻、取代符合指定格式的字串。
历史
1950年代:在计算机科学的早期阶段,正则表达式的概念首次出现。计算机科学家Stephen Kleene于1951年提出了正则集合的概念,这是正则表达式的理论基础。
1960年代:在这个时期,正则表达式的理论得到了发展和扩展。Ken Thompson于1968年在贝尔实验室开发出了一种用于文本编辑器的正则表达式引擎,这被认为是正则表达式的早期实现。
1970年代:正则表达式开始在计算机科学领域得到广泛应用。在此期间,Ken Thompson和Rob Pike开发了Unix操作系统中的grep工具,该工具使用正则表达式进行文本搜索和匹配。
1980年代:正则表达式的概念进一步扩展和应用。Henry Spencer开发了一个广泛使用的正则表达式库,成为许多编程语言中的标准组件。正则表达式开始成为文本处理、模式匹配和字符串操作的重要工具。
1990年代:正则表达式的使用逐渐普及。互联网的发展和广泛应用使得正则表达式在Web开发、数据处理和搜索引擎等领域得到了广泛应用。许多编程语言和文本编辑器都开始支持正则表达式。
2000年代:正则表达式继续发展和演进。正则表达式引擎的性能和功能得到改进,支持更复杂的模式匹配和高级操作。一些新的正则表达式语法和标准被引入,使得正则表达式更加强大和灵活。
2010年代:随着大数据、机器学习和自然语言处理等领域的发展,正则表达式的应用进一步扩展。正则表达式在数据清洗、文本挖掘、信息抽取等任务中发挥着重要作用。
分类
BRE基本正则表达式 ,grep、sed、vi等软件支持。vim有扩展。
ERE扩展正则表达式,egrep(grep-E)、sed -r等。
PCRE几乎所有高级语言都是PCRE的方言或者变种。Python从1.6开始使用SRE正则表达式引擎,可以认为是PCRE的子集,见模块re。
语法
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
本部分仅展示部分入门语法,详细语法请看文末表达式手册
字符 | 描述 |
$ | 匹配输入字符串的结尾位置。 |
() | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。 |
* | 匹配前面的子表达式零次或多次。 |
+ | 匹配前面的子表达式一次或多次。 |
. | 匹配除换行符 \n 之外的任何单字符。 |
[ | 标记一个中括号表达式的开始。 |
? | 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。 |
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。 |
^ | 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。 |
{ | 标记限定符表达式的开始。 |
| | 指明两项之间的一个选择。 |
补充
正则表达式 的() [] {}
有着不同的意思,如下
()
是为了提取匹配字符串的,表达式中有几个()就有几个相应的匹配字符串。[]
是定义匹配的单个字符的范围,比如[a-zA-Z0-9]表示相应位置的字符要匹配英文字符或数字。{}
一般是用来匹配的长度,格式为{n}、{n,m}、{n,}。(ab){0,12}? 表示匹配0到12次但尽可能少(但是不同语言中有些许不同,linux的grep命令中{}需要转义)
寄语
正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真阅读教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题。
参考文章
梳理正则表达式发展史-腾讯云开发者社区-腾讯云 (tencent.com)
一学就会!正则表达式超详细讲解,看这一篇就够了 - 掘金 (juejin.cn)
正则表达式 – 语法 | 菜鸟教程 (runoob.com)
推荐阅读
正则表达式 - 维基百科,自由的百科全书 (wikipedia.org)
正则表达式参考文档 - Regular Expression Syntax Reference (regexlab.com)