快速入门
教程
工具和语言
示例
参考
书评
正则表达式教程
简介
目录
特殊字符
不可打印字符
正则表达式引擎内部
字符类
字符类减法
字符类交集
简写字符类
单词边界
交替
可选项
重复
分组和捕获
反向引用
反向引用,第 2 部分
命名组
相对反向引用
分支重置组
自由间距和注释
Unicode
模式修饰符
原子分组
占有量词
前瞻和后顾
环视,第 2 部分
将文本排除在匹配之外
条件
平衡组
递归
子例程
无限递归
递归和量词
递归和捕获
递归和反向引用
递归和回溯
POSIX 方括号表达式
零长度匹配
继续匹配
本网站上的更多内容
简介
正则表达式快速入门
正则表达式教程
替换字符串教程
应用程序和语言
正则表达式示例
正则表达式参考
替换字符串参考
书评
可打印 PDF
关于本网站
RSS 提要和博客
RegexBuddy—Better than a regular expression tutorial!

正则表达式教程目录

本正则表达式教程将教授你正则表达式的各个方面。每个主题都假定你已经阅读并理解了所有先前的主题。如果你不熟悉正则表达式,你应该按所呈现的顺序阅读这些主题。

简介

简介指出了本教程的范围以及讨论了哪些正则表达式风格。它还介绍了基本术语。

文本字符和特殊字符

最简单的正则表达式仅由文本字符组成。某些字符在正则表达式中具有特殊含义,必须进行转义。在软件源代码中使用正则表达式时,转义规则可能会变得有点复杂。

不可打印字符

使用控制字符转义或十六进制转义可以更轻松地输入不可打印字符,例如控制字符和特殊间距或换行符字符。

正则表达式引擎内部工作原理

首先了解正则表达式引擎内部结构。后面的主题将基于这些信息。了解引擎内部结构将极大地帮助你编写出符合预期且不匹配不需要内容的正则表达式。

字符类或字符集

字符类或字符集匹配多个可能字符中的单个字符,包括单个字符和/或字符范围。否定字符类匹配字符类中不存在的单个字符。

简写字符类

简写字符类允许你快速使用通用字符集。你可以单独使用简写或将其作为字符类的一部分。

字符类减法

字符类减法允许你匹配存在于一个字符集中但不存在于另一个字符集中的一个字符。

字符类交集

字符类交集允许你匹配存在于一个字符集中且也存在于另一个字符集中的一个字符。

点匹配任何字符,但通常不匹配换行符,除非你更改选项。

锚点是零长度的。它们不匹配任何字符,而是匹配一个位置。有锚点匹配主题字符串的开头和结尾,以及锚点匹配每一行的开头和结尾。

单词边界

单词边界类似于锚点,但匹配单词开头和/或单词结尾。

交替

通过使用竖线分隔不同的子正则表达式,你可以告诉正则表达式引擎从左到右尝试它们,并在其中一个可以匹配时立即返回成功。

可选项

在项目后放置问号告诉正则表达式引擎在可能的情况下匹配项目,但如果无法匹配,则继续(而不是承认失败)。

使用各种量词进行重复

三种样式的运算符(星号、加号和大括号)允许你重复项目零次或多次、一次或多次,或任意多次。重要的是要理解,除非你明确地将这些量词设为“惰性”,否则它们默认情况下是“贪婪的”。

分组

通过在正则表达式的部分周围放置括号,可以告诉引擎在应用量词或将备选方案组合在一起时将该部分视为单个项目。括号还会创建捕获组,允许你重复使用正则表达式部分匹配的文本。

反向引用

对捕获组的反向引用与先前由该捕获组匹配的文本相同,允许你匹配重复文本的模式。

命名组和反向引用

如果使用命名的捕获组和命名的反向引用,具有多个组的正则表达式会更易于阅读和维护。

分支重置组

当使用交替来匹配同一事物的不同变体时,可以将备选方案放在分支重置组中。然后,所有备选方案共享相同的捕获组。这允许你使用反向引用或检索匹配文本的一部分,而无需检查是哪个备选方案捕获了它。

自由间距和注释

将正则表达式拆分成多行,添加注释和空格,使其更易于阅读和理解。

Unicode 字符和属性

如果你的正则表达式风格支持 Unicode,则可以使用特殊的 Unicode 正则表达式标记来匹配特定的 Unicode 字符,或匹配具有特定 Unicode 属性或属于特定 Unicode 脚本或块的任何字符。

模式修饰符

更改匹配模式,例如正则表达式特定部分的“不区分大小写”。

原子分组和所有格量词

嵌套量词会导致指数级增加的回溯,使正则表达式引擎陷入停滞。原子分组和所有格量词提供了解决方案。

带零长度断言的环视第 1 部分第 2 部分

使用环视(统称为环视),你可以找到后面跟或不跟特定文本,前面有或没有特定文本的匹配项,而无需在整体正则表达式匹配项中包含前面的或后面的文本。你还可以使用环视来针对多个要求测试匹配的相同部分。

将迄今为止匹配的文本保留在整体正则表达式匹配项之外

将迄今为止匹配的文本保留在整体正则表达式匹配项之外,允许你找到前面有特定文本的匹配项,而无需在整体正则表达式匹配项中包含该前面的文本。这种方法主要适用于对环视支持有限或不支持环视的正则表达式风格。

条件

条件是一种特殊结构,它首先评估环视或反向引用,然后在环视成功时执行一个子正则表达式,在环视失败时执行另一个子正则表达式。

递归

递归在正则表达式内部的特定点再次匹配整个正则表达式,这使得匹配平衡结构成为可能。

子例程调用

子例程调用允许你编写正则表达式,这些表达式在多个地方匹配相同的构造,而无需复制正则表达式的部分。

递归、子例程和捕获

支持递归和子例程调用的正则表达式风格以不同的方式处理递归和子例程调用中的捕获组。

具有递归级别的反向引用

特殊反向引用匹配特定递归级别捕获组存储的文本,而不是该捕获组最近匹配的文本。

递归、子例程和回溯

支持递归和子例程调用的正则表达式风格在递归或子例程调用失败后以不同的方式进行回溯。

POSIX 方括号表达式

如果你正在使用 POSIX 兼容 的正则表达式引擎,则可以使用 POSIX 方括号表达式来匹配与语言环境相关的字符。

零长度匹配问题

当正则表达式可以找到零长度匹配时,正则表达式引擎使用不同的策略来避免在想要迭代字符串中的所有匹配时卡在零长度匹配上。这可能会导致不同的匹配结果。

从上一个匹配尝试继续

强制正则表达式匹配从上一个匹配的末尾开始提供了一种解析文本数据的有效方法。