Skip to content
正则速查表
Tools

正则速查表

可搜索的正则表达式符号与标志参考手册。

Live regex tester

Type a pattern and a test string — matches highlight instantly, with every capture group broken out below.

/ /
Flags
Matches
Capture groups

Common regex patterns

Battle-tested patterns — load one into the tester to see it run, or copy it straight out.

Email address
[\w.+-]+@[\w-]+\.[\w.-]+
URL (http/https)
https?:\/\/[^\s]+
US phone number
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Date (YYYY-MM-DD)
(\d{4})-(\d{2})-(\d{2})
Time (24-hour)
([01]?\d|2[0-3]):[0-5]\d
IPv4 address
\b(?:\d{1,3}\.){3}\d{1,3}\b
Hex color
#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{3})\b
Slug / username
[a-z0-9]+(?:-[a-z0-9]+)*
Whole number / integer
-?\d+
Strong password (8+, mixed)
(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}
Duplicate word
\b(\w+)\s+\1\b
Trailing whitespace
[ \t]+$

Regex cheat sheet

Every token, grouped with a quick example. Search by symbol or keyword; click any token to copy it.

Regex flavors: JavaScript, Python, Java, PCRE & grep

The tester above runs JavaScript regex. Most syntax is shared — here's what differs between engines.

FeatureJavaScriptPython (re)JavaPCRE / grep
Named group(?<name>…)(?P<name>…)(?<name>…)(?P<name>…)
Dotall (. matches \n)s flagre.DOTALL / (?s)Pattern.DOTALL(?s)
Ignore casei flagre.IGNORECASE / (?i)(?i) flag(?i) / grep -i
Lookbehind(?<=…) ES2018+SupportedSupportedgrep -P only
Backslash in source/\d/ literalr"\d" raw string"\\d" doubled\d
Find every matchstr.matchAll(/…/g)re.findall()Matcher.find()grep -o
POSIX class [[:digit:]]use \d insteaduse \d insteadsupportedsupported

Runs entirely in your browser. Nothing is uploaded.

带示例与实时测试器的正则表达式速查表

这份正则表达式速查表将所有常用正则语法集中在一处,并配有实时测试器,让你在查阅的同时立即验证。输入表达式、选择标志、粘贴测试字符串,匹配结果即时高亮,捕获组内容一目了然。

无需安装任何软件,也不需要注册账号:整个正则表达式参考完全在浏览器中运行,测试文本不会被上传至服务器。没有广告,没有登录门槛,测试字符串也没有长度限制。

所有正则语法,按类别整理并附示例

参考表涵盖你最常用的语法:字符类\d\w\s 以及自定义集合如 [a-z])、锚点与边界^$\b)、量词*+?{n,m} 及其懒惰形式)、分组与交替环视标志 g i m s u y,以及匹配字面量点和斜杠所需的转义。

每条语法都附有简洁具体的示例——\bcat\b 匹配单词 'cat' 但不匹配 'category'——让含义一眼就能记住。按符号或关键词搜索正则语法条目,点击即可复制。

边构建边测试你的正则表达式

静态速查表无法告诉你表达式是否真正有效。内置的正则测试器会实时编译你的表达式,在示例文本中高亮所有匹配项,并列出每个匹配的编号捕获组和命名捕获组。

切换全局、不区分大小写、多行、dotall、Unicode 和粘性标志,实时观察结果变化。如果表达式无效,会显示易懂的错误提示,而不是悄无声息地失败——在实时环境中看到表达式匹配,是学习正则最快的方式。

常用正则表达式,随时复制使用

有些正则场景反复出现——电子邮件地址、URL、电话号码、ISO 日期、IPv4 地址、十六进制颜色以及强密码校验。"常用模式"区块为每种场景提供了经过验证的版本:直接加载到测试器中即可在示例文本上运行,也可以复制到你的代码里。

这些都是实用的起点,可以根据需要调整,而非一成不变的规则——这正是在自己数据上测试如此重要的原因。

与 regex101.com 和 regexr.com 的比较

regex101.com 是网络上最流行的专用正则工具,这是有充分理由的。它支持六种正则引擎(PCRE、Python re、Golang、Java、.NET 和 JavaScript),提供逐语法单元的解释面板,并记录匹配历史。如果你在调试复杂的生产环境表达式,或需要验证一个表达式在 PHP 和 Python 中行为一致,regex101 是最合适的工具。regexr.com 提供类似的体验,并有社区贡献的公共模式库。

UtiloKit 这个页面处于工作流中的不同位置。它将可搜索的语法参考表与实时测试器整合在同一屏幕上,专为这种常见情况优化:你大致知道自己需要什么,但记不住确切语法。打开页面、查找语法、粘贴测试字符串,然后回到编辑器——无需切换标签页,无需账号,没有广告。对于每天要在 regex101.com 查几十次"环视到底是 (?<=…) 还是 (?<!…)"的开发者来说,有一个专用的可搜索参考表明显更快。两者都用:regex101 用于深度调试,本页面用于快速查阅。

正则引擎差异:JavaScript、Python、Java、PCRE 与 grep

大多数正则语法是通用的,但各引擎在细节上有所不同。这里的测试器使用 JavaScript 正则,与 Node.js 和浏览器相同。Pythonre 模块需要原始字符串如 r"\d+",命名分组写作 (?P<name>…)Java 在字符串字面量中需要双重反斜杠;PCRE(PHP 以及 grep -P)功能最全面;而 POSIX 的 grep -E 有其自己的转义规则。

引擎对比表列出了各引擎在命名分组、dotall、不区分大小写、环视和"查找全部"方面的差异,帮助你在 Python 正则表达式模式与 JavaScript 之间——或反向——迁移时不踩坑。

贪婪与懒惰,以及其他常见陷阱

有两点几乎让所有人都犯过错。第一,量词默认是贪婪的:.+ 会尽可能多地匹配,所以要匹配单个 HTML 标签,通常应使用懒惰形式 .+?。第二,忘记转义元字符——裸露的 . 匹配任意字符,而 \. 匹配字面量点,因此价格的正则需要写成 \d+\.\d{2}

保持速查表常开,这些问题就不会再让你意外。

私密、即时、完全免费

无需安装任何软件,也不需要创建账号。每一次查阅、每一次匹配、每一次复制都在浏览器本地完成——你的表达式和测试数据永远不会离开你的设备。收藏这份正则表达式速查表,每当需要回忆某个语法或验证一个表达式时,随时取用。

Frequently asked questions

正则表达式是什么?能举个例子吗?

正则表达式(regex)是一种简洁的模式,用来描述一组字符串,主要用于搜索、匹配和替换文本。例如,模式 \d{3}-\d{4} 可以匹配像 555-1234 这样的电话片段,因为 \d 表示"一个数字",{3} 表示"恰好三个"。正则表达式在几乎所有编程语言和代码编辑器中都支持查找替换、表单验证和日志解析。本页顶部的实时测试器可让你立即尝试任意表达式。

正则表达式有哪些基本语法符号?

基本构建块包括:.(匹配除换行符以外的任意字符)、\d(数字)、\w(单词字符——字母、数字或下划线)、\s(空白字符)、锚点 ^(开始)和 $(结束),以及量词 *(零次或多次)、+(一次或多次)和 ?(零次或一次,即可选)。因此 \w+ 匹配一整个单词,\d+ 匹配像 2024 这样的完整数字。组合使用——^\d+$ 匹配只含数字的整行。本速查表上的每个语法符号都附有可复制的示例。

\d、\w 和 \s 分别是什么意思?

\d 匹配任意数字 0–9;\w 匹配单词字符(a–z、A–Z、0–9 或 _);\s 匹配空白字符(空格、制表符或换行符)。它们的大写形式是对应的取反:\D 匹配非数字,\W 匹配非单词字符,\S 匹配非空白字符。例如在文本 'a5 b' 中,\d 匹配 5,\w 匹配 a、5 和 b,\s 匹配它们之间的空格。这三个简写字符类涵盖了绝大多数日常正则表达式的需求。

正则表达式中的锚点是什么?

锚点匹配的是位置而非字符。^ 匹配字符串开头(或在 m 标志下匹配每行开头),$ 匹配结尾,\b 匹配单词边界,\B 匹配非单词边界。例如,^\d+$ 匹配只由数字组成的字符串,而 \bcat\b 匹配单词 'cat',但不匹配 'category' 中的 'cat'。锚点常被误解为字符匹配器——它们匹配的是文本中的位置,而不是具体字符。

正则表达式中的量词是什么?

量词指定前一个语法单元可以重复的次数:* 是零次或多次,+ 是一次或多次,? 是零次或一次(可选),{n} 是恰好 n 次,{n,} 是 n 次或更多,{n,m} 是 n 到 m 次之间。量词默认是贪婪的(尽可能多匹配);在后面加 ? 可改为懒惰模式。例如 \d{1,3} 匹配 1 到 3 个数字,而懒惰形式 .+? 匹配尽可能少的字符。在匹配 HTML 标签或引号字符串时,懒惰量词不可或缺。

分组和捕获组是什么?

括号(…)创建一个捕获组,你可以提取或复用其中的内容——(\d{4})-(\d{2}) 会从 '2024-06' 中将年份捕获到第 1 组,月份捕获到第 2 组。当你只是需要对量词进行分组而不需要捕获时,使用 (?:…) 创建非捕获组;(?<name>…) 用于创建命名分组,例如 (?<year>\d{4})。反向引用(如 \1)可以重新匹配第 1 组捕获的内容,因此 (\w)\1 可以找到重复字母——比如 'hello' 中的 'll'。

什么是正则表达式中的环视(lookahead/lookbehind)?

环视断言你的匹配旁边有(或没有)某段文本,但不消耗这段文本。(?=…) 是正向先行断言,(?!…) 是负向先行断言,(?<=…) 是正向后行断言,(?<!…) 是负向后行断言。例如,\d+(?=px) 匹配 '5px' 中的 5,但不包含 'px';(?<=\$)\d+ 通过要求前面有美元符号来匹配 '$9' 中的 9。环视是现代正则引擎与 POSIX grep 的重要区别之一。

正则表达式的标志(flags)有哪些?

标志改变整个表达式的应用方式:g(全局)查找所有匹配,i 忽略大小写,m(多行)使 ^ 和 $ 匹配每一行,s(dotall)使 . 可以匹配换行符,u 启用完整 Unicode 支持,y(粘性)将匹配锚定在固定位置。在 JavaScript 中,标志写在闭合斜杠之后,例如 /cat/gi 可以匹配文本中所有位置的 'Cat' 和 'CAT'。本页面的测试器为每个标志提供了切换按钮,让你实时查看效果。

如何写匹配电子邮件、电话号码或 URL 的正则表达式?

实用的起始模式:电子邮件——[\w.+-]+@[\w-]+\.[\w.-]+;URL——https?:\/\/[^\s]+;手机号(国内11位)——1[3-9]\d{9},匹配如 13812345678 这样的格式。这些都是实用性模式,并非穷尽所有情况——官方电子邮件标准复杂得多——因此请务必用上面的实时测试器在你的真实数据上测试,每种模式在"常用模式"列表中一键即可加载。

如何转义正则表达式中的特殊字符?

在任何元字符前加一个反斜杠,即可匹配其字面量。通常需要转义的字符有:. ^ $ * + ? ( ) [ ] { } | \ 和 /。例如,\. 匹配字面量点,\$ 匹配人民币符号(¥ 用 ¥ 或直接输入),因此 \d+\.\d{2} 匹配像 19.99 这样的价格。在字符类内部,大多数元字符失去特殊含义,所以 [.] 也可以在不转义的情况下匹配字面量点。

JavaScript、Python 和 Java 的正则语法有什么区别?

核心语法是共通的,但细节有所不同。JavaScript 用 (?<name>…) 命名分组,而 Python 使用 (?P<name>…);Python 使用原始字符串如 r"\d+",Java 在字符串字面量中需要双重反斜杠("\\d+")。dotall 在 JS 中是 s 标志,Python 中是 re.DOTALL,Java 中是 Pattern.DOTALL。本页面的引擎对比表总结了 Python、Java、PCRE 和 grep 在这些方面的差异,帮助你放心地在不同语言之间迁移表达式。

Python 中的正则表达式怎么用?

在 Python 中,正则表达式功能来自内置的 re 模块。通常将模式写成原始字符串,并调用 re.search、re.findall 或 re.sub 等函数——例如 re.findall(r"\d+", "a1 b22") 返回 ['1', '22']。命名分组使用 (?P<name>…),通过 match.group('name') 读取。本页面的语法参考可直接应用于 Python 正则;与 JavaScript 不同的只是外层 API 和少数标志名称。

怎么测试一个正则表达式是否正确?

使用本页顶部的实时测试器:在斜杠之间输入表达式,切换所需标志,粘贴测试字符串。匹配结果实时高亮,每个编号和命名捕获组都在下方列出,无效的表达式会显示内联错误提示而不是悄悄失败——所有这些都在浏览器本地运行,你粘贴的内容不会被上传。regex101.com 和 regexr.com 也有类似功能;本页面将参考文档与测试器合为一体,查阅和测试一步到位。

这个工具和 regex101.com、regexr.com 有什么区别?

regex101.com 是业界标准的深度正则调试工具——支持多种引擎(PCRE、Python、Java、.NET、Golang),对表达式中每个语法单元给出详细解释。regexr.com 提供类似体验并有社区模式库。两者都是优秀的专用工具。UtiloKit 这份速查表定位不同:它将可搜索的语法参考表与基础实时测试器整合在同一页面,专为"知道大概需要什么,但记不住确切语法"的场景优化。打开页面、查找语法、验证一下,回到编辑器——无需切换标签页,无需账号,没有广告。对于复杂的生产正则调试,regex101.com 的引擎对比和详细调试器难以超越;对于开发过程中的快速查阅,本参考页面加载更快,操作更直接。

为什么叫"正则表达式"?

这个名称来源于形式语言理论。20 世纪 50 年代,数学家斯蒂芬·科莱尼(Stephen Kleene)提出了"正则集合"的概念——即简单有限状态机可以识别的语言——他为此使用的符号记法后来被称为正则表达式。现代正则引擎新增了反向引用和环视等超越严格"正则"语言的特性,但这个历史名称延续了下来。

Related tools

查看全部工具