学习手册 | 正则表达式

简介: 正则表达式(英语:Regular expression,常简写为regex、regexp或RE),又称规律表达式、正规表示式、正规表示法、规则运算式、常规表示法,是计算机科学概念,用简单字串来描述、匹配文中全部符合指定格式的字串,现在很多文本编辑器都支援用正则表达式搜寻、取代符合指定格式的字串。



简介

正则表达式(英语: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 之外的任何单字符。
[ 标记一个中括号表达式的开始。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。
{ 标记限定符表达式的开始。
| 指明两项之间的一个选择。

补充

正则表达式() [] {} 有着不同的意思,如下

  1. ()是为了提取匹配字符串的,表达式中有几个()就有几个相应的匹配字符串。
  2. [] 是定义匹配的单个字符的范围,比如[a-zA-Z0-9]表示相应位置的字符要匹配英文字符或数字。
  3. {} 一般是用来匹配的长度,格式为{n}、{n,m}、{n,}。(ab){0,12}? 表示匹配0到12次但尽可能少(但是不同语言中有些许不同,linux的grep命令中{}需要转义)

寄语

正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真阅读教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题。

参考文章

梳理正则表达式发展史-腾讯云开发者社区-腾讯云 (tencent.com)

一学就会!正则表达式超详细讲解,看这一篇就够了 - 掘金 (juejin.cn)

正则表达式 – 语法 | 菜鸟教程 (runoob.com)

推荐阅读

正则表达式 - 维基百科,自由的百科全书 (wikipedia.org)

正则表达式手册 (oschina.net)

正则表达式参考文档 - Regular Expression Syntax Reference (regexlab.com)

目录
相关文章
|
8月前
|
存储 JavaScript 安全
JS正则表达式:常用正则手册/RegExp/正则积累(二)
JS正则表达式:常用正则手册/RegExp/正则积累
50 0
|
8月前
|
JavaScript 前端开发
JS正则表达式:常用正则手册/RegExp/正则积累(一)
JS正则表达式:常用正则手册/RegExp/正则积累
65 1
|
8月前
|
Java
从零开始学习 Java:简单易懂的入门指南之正则表达式(十五)
从零开始学习 Java:简单易懂的入门指南之正则表达式(十五)
|
2月前
|
存储 JavaScript API
C++ 正则表达式库 std::basic_regex 中文手册(API说明来自cppreference.com)
C++ 正则表达式库 std::basic_regex 中文手册(API说明来自cppreference.com)
26 0
|
2月前
|
机器学习/深度学习 Java 索引
39、一篇文章弄懂 Java 正则表达式中的量词、贪婪、勉强、独占和 String 的 matches 方法的底层【个人感觉非常值得学习】
39、一篇文章弄懂 Java 正则表达式中的量词、贪婪、勉强、独占和 String 的 matches 方法的底层【个人感觉非常值得学习】
30 0
|
4月前
|
数据采集 Python
Python学习 -- 正则表达式(re模块)
Python学习 -- 正则表达式(re模块)
22 0
|
4月前
|
Python
Python基础学习 -- 正则表达式
Python基础学习 -- 正则表达式
14 0
|
4月前
|
Shell Linux Perl
Shell基础学习---3、Read读取控制台输入、函数、综合应用案例:归档文件、正则表达式入门(第二天学习)
Shell基础学习---3、Read读取控制台输入、函数、综合应用案例:归档文件、正则表达式入门
|
4月前
|
关系型数据库 MySQL 数据库
MySQL通配符和正则表达式(数据库学习—— 二)
MySQL通配符和正则表达式(数据库学习—— 二)
22 1
|
9月前
|
Shell Linux Perl
Shell基础学习---3、Read读取控制台输入、函数、正则表达式入门
Shell基础学习---3、Read读取控制台输入、函数、正则表达式入门