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

正则表达式教程
了解如何使用正则表达式并充分利用它们

本教程将教授您掌握强大且省时的正则表达式所需了解的所有知识。它从最基本的概念开始,因此即使您对正则表达式一无所知,也可以学习本教程。

本教程不止于此。它还解释了正则表达式引擎的内部工作原理,并提醒您其后果。这有助于您快速了解为什么特定的正则表达式没有达到您的预期。当您需要编写更复杂的正则表达式时,它将为您节省大量猜测和苦思冥想的时间。

正则表达式到底是什么 - 术语

基本上,正则表达式是一种描述一定数量文本的模式。它们的名称来自它们所基于的数学理论。但我们不会深入研究这一点。您通常会发现名称缩写为“regex”或“regexp”。本教程使用“regex”,因为它很容易发音复数形式“regexes”。在本网站上,正则表达式以灰色阴影显示为 regex

这个第一个示例实际上是一个完全有效的正则表达式。它是最基本的模式,仅匹配文本原义 regex。“匹配”是文本片段,或正则表达式处理软件发现与该模式相对应的字节或字符序列。匹配在本网站上以蓝色突出显示。

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b 是一个更复杂的模式。它描述了一系列字母、数字、点、下划线、百分号和连字符,后跟一个 at 符号,再后跟另一系列字母、数字和连字符,最后后跟一个点和两个或更多个字母。换句话说:此模式描述了一个 电子邮件地址。这也显示了应用于此网站上的正则表达式的语法高亮显示。单词边界和量词为蓝色,字符类为橙色,转义的文本为灰色。在教程的后面,您将看到其他颜色,如用于分组的绿色和用于元标记的紫色。

使用上述正则表达式模式,您可以搜索文本文件以查找电子邮件地址,或验证给定的字符串是否看起来像电子邮件地址。本教程使用术语“字符串”来表示应用正则表达式的文本。本网站用 绿色 突出显示它们。程序员使用术语“字符串”或“字符字符串”来表示一系列字符。在实践中,您可以将正则表达式与可以使用您正在使用的应用程序或编程语言访问的任何数据一起使用。

不同的正则表达式引擎

正则表达式“引擎”是一个可以处理正则表达式的软件,尝试将模式与给定的字符串匹配。通常,引擎是更大应用程序的一部分,您无法直接访问引擎。相反,应用程序在需要时会为您调用它,确保将正确的正则表达式应用于正确的文件或数据。

与软件世界中常见的情况一样,不同的正则表达式引擎并不完全兼容。特定引擎的语法和行为称为正则表达式风格。本教程涵盖所有流行的正则表达式风格,包括 PerlPCREPHP.NETJavaJavaScriptXRegExpVBScriptPythonRubyDelphiRTclPOSIX许多其他。当这些风格需要不同的语法或表现出不同的行为时,本教程会提醒您。即使您的应用程序未明确包含在本教程中,它也可能使用本教程中涵盖的正则表达式风格,因为大多数应用程序都是使用刚才提到的编程环境或正则表达式库之一开发的。

初试正则表达式

你可以轻松地在支持正则表达式的文本编辑器中尝试以下内容,例如 EditPad Pro。如果你没有此类编辑器,你可以 下载 EditPad Pro 的免费试用版 来尝试。EditPad Pro 的正则表达式引擎在演示版中具有全部功能。

Searching Using Regular Expressions with EditPad ProSearching Using Regular Expressions with EditPad Pro

作为快速测试,将此页面的文本复制并粘贴到 EditPad Pro 中。然后在菜单中选择搜索 | 多行搜索面板。在底部附近出现的搜索面板中,在标记为“搜索文本”的框中输入 regex。选中“正则表达式”复选框,然后单击查找第一个按钮。这是搜索面板上的最左边的按钮。看看 EditPad Pro 的正则表达式引擎如何找到第一个匹配项。单击查找下一个按钮(位于查找第一个按钮旁边)以查找更多匹配项。如果没有更多匹配项,查找下一个按钮的图标会短暂闪烁。

现在尝试使用正则表达式 reg(ular expressions?|ex(p|es)?) 进行搜索。此正则表达式会找到我在此页面上用来表示“regex”的所有名称(单数和复数)。如果我们只有纯文本搜索,我们将需要进行 5 次搜索。使用正则表达式,我们只需要进行一次搜索。使用 EditPad Pro 等工具时,正则表达式可以为你节省时间。在搜索菜单中选择计数匹配项,以查看此正则表达式可以在 EditPad Pro 中打开的文件中匹配多少次。

如果你是一名程序员,你的软件将运行得更快,因为即使是应用上述正则表达式的简单正则表达式引擎也会比最先进的纯文本搜索算法在数据中搜索五次的效果更好。正则表达式还可以减少开发时间。使用正则表达式引擎,只需一行(例如在 Perl、PHP、Python、Ruby、Java 或 .NET 中)或几行(例如在使用 PCRE 的 C 中)代码即可检查用户的输入是否看起来像 有效的电子邮件地址

正则表达式教程目录