正则表达式(英文:Regular Expression,简称 Regex)是定义搜索模式的字符序列。正则表达式用于匹配、查找、替换或验证字符串——从简单的单词搜索到复杂的文本处理任务。所有主流编程语言都内置了正则表达式引擎,使其成为开发者工具箱中最通用的工具之一。
想要交互式地测试正则表达式?
打开正则表达式测试工具 →正则表达式起源于形式语言理论。数学家 Stephen Cole Kleene 在 1950 年代将其作为描述正则语言的符号引入。Ken Thompson 在 UNIX 文本编辑器 ed 以及后来的 grep(1973)中实现了正则表达式。Perl(1987)大幅扩展了语法,并推广了 PCRE(Perl 兼容正则表达式)方言,这是当今大多数现代语言所遵循的标准。
正则表达式是写在分隔符之间的模式(在 JavaScript 中:/模式/标志)。模式可以包含字面量字符、特殊元字符和量词。
/* 电子邮件验证正则表达式 */
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
/* 匹配:user@example.com */
/* 不匹配:notanemail */
cat 匹配字符串 "cat"[aeiou] 匹配任意元音,[a-z] 匹配任意小写字母,[^0-9] 匹配任意非数字字符^ 匹配字符串开头,$ 匹配字符串结尾*(0 次或多次)、+(1 次或多次)、?(0 次或 1 次)、{n}(恰好 n 次)、{n,m}(n 到 m 次). 匹配除换行符外的任意单个字符cat|dog 匹配 "cat" 或 "dog"(abc) 捕获组,(?:abc) 非捕获组\ 将其视为字面量:\. 匹配句点\d(数字)、\w(单词字符)、\s(空白)及其反义 \D、\W、\S^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$https?://[^\s]+\d{4}-\d{2}-\d{2}\+?[\d\s\-\(\)]{7,15}\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b#[0-9a-fA-F]{3,6}g — 全局 — 查找所有匹配项,而不仅仅是第一个i — 不区分大小写 — /hello/i 匹配 "Hello"、"HELLO"、"hello"m — 多行 — ^ 和 $ 匹配每行的开头和结尾s — dotAll — . 也匹配换行符. * + ? ^ $ { } [ ] | ( ) \ 作为字面量使用时必须用 \ 转义*、+)尽可能多地匹配;在其后加 ?(*?、+?)可进行懒惰匹配正则表达式(Regex)是定义搜索模式的字符序列。用于在文本中匹配、查找、替换或验证字符串。所有主流编程语言都支持正则表达式。
Regex 是 Regular Expression(正则表达式)的缩写。该术语来自数学家 Stephen Cole Kleene 在 1950 年代发展的形式语言理论。
正则表达式用于输入验证(电子邮件、电话、密码)、文本编辑器中的搜索替换、日志文件解析、Web 框架中的 URL 路由以及从非结构化文本中提取数据。
大多数语言支持基于 PCRE 的通用核心语法。JavaScript、Python、Java 和 PHP 都使用 PCRE 兼容引擎,但标志和一些高级功能在语言之间可能有所不同。
* 量词匹配前面元素的零次或多次出现。+ 量词匹配一次或多次出现。因此 a* 可以匹配空字符串,而 a+ 至少需要一个 "a"。
^ 有两种含义。在模式开头,它是匹配字符串开头(多行模式下为行开头)的锚点。在字符类 [^abc] 内,它表示否定——匹配除列出字符之外的任意字符。