无需登录 数据私有 本地保存

正则表达式速查表 - 语法规则及示例

22
0
0
0

正则表达式速查表

全面的正则表达式语法规则、示例及在线测试工具

全部 字符类 量词 锚点边界 分组捕获 断言环视 标志修饰 常用示例 转义字符
在线测试工具
点击"执行匹配"查看结果

常见问题 (FAQ)

正则表达式(Regular Expression,简称Regex)是一种用于描述字符模式的强大工具。它由一系列字符和特殊符号组成,用于在文本中进行搜索、匹配、替换和提取操作。正则表达式广泛应用于:表单验证(邮箱、手机号)、日志分析、数据清洗、代码搜索替换、爬虫数据提取、文本编辑器中的查找替换等场景。几乎所有主流编程语言(JavaScript、Python、Java、C#、PHP、Go等)都内置了对正则表达式的支持。

正则表达式中有以下特殊字符(元字符):. * + ? ^ $ { } ( ) | [ ] \ /。如果需要匹配这些字符本身(字面量),必须使用反斜杠 \ 进行转义。例如:\. 匹配句号,\* 匹配星号,\\ 匹配反斜杠本身。在编程语言的字符串中,反斜杠本身也需要转义,因此实际代码中可能需要写成 \\\\. 来匹配一个句号(如JavaScript字符串中的"\\.")。

贪婪匹配(默认):量词(* + {n,m})会尽可能多地匹配字符。例如正则 <.*> 匹配HTML标签时,对于字符串 <div>hello</div>,会匹配整个字符串而非单个标签。

非贪婪匹配(懒惰匹配):在量词后添加 ?(如 *? +? ?? {n,m}?),使其尽可能少地匹配。例如 <.*?> 会分别匹配 <div></div>。非贪婪匹配在提取HTML标签、引号内容等场景中非常实用。

捕获组使用圆括号 (...) 将正则的一部分括起来,匹配后会保存该部分匹配的内容,供后续使用。捕获组有两种引用方式:
反向引用:在正则内部使用 \1 \2 等引用之前的捕获组,例如 (\w+)\s+\1 匹配重复的单词。
编程提取:在代码中通过 match[1](JavaScript)、group(1)(Python)、$1(替换操作)等方式获取捕获组内容。
如果只需要分组功能而不需要捕获,可以使用非捕获组 (?:...),它可以提高性能。ES2018+还支持命名捕获组 (?<name>...)

零宽断言(环视)用于匹配某个位置之前或之后的内容,但断言本身不消耗字符(零宽度)。分为四种:
(?=...) 正向前瞻:后面必须跟着指定模式。
(?!...) 负向前瞻:后面不能跟着指定模式。
(?<=...) 正向后顾:前面必须是指定模式(ES2018+支持)。
(?<!...) 负向后顾:前面不能是指定模式(ES2018+支持)。
例如:\d+(?=元) 匹配"价格是99元"中的"99",但"元"不参与匹配。零宽断言在密码验证、前置条件判断等场景非常有用。

g — 全局匹配(Global):查找所有匹配,而非在第一个匹配后停止。
i — 忽略大小写(IgnoreCase):不区分字母大小写。
m — 多行模式(Multiline):使 ^$ 匹配每行的开头和结尾,而非整个字符串的开头和结尾。
s — dotAll模式:使 . 也能匹配换行符(\n \r)。
u — Unicode模式:启用完整的Unicode支持,支持 \p{...} Unicode属性转义。
y — 粘性模式(Sticky):从 lastIndex 位置开始精确匹配,不向前搜索。

匹配邮箱的常用正则表达式:[\w.-]+@[\w.-]+\.\w+(宽松版)或更严格的 \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b。需要注意的是,完全符合RFC 5322标准的邮箱正则非常复杂,实际项目中建议使用宽松的正则配合发送验证邮件来确认邮箱有效性,而非依赖过于严格的正则表达式。邮箱验证的核心是确认包含@符号、有域名、有顶级域名即可。

匹配URL的基础正则:https?://[\w.-]+/\S*。更完整的版本可以匹配可选协议、子域名、端口号、路径、查询参数等。例如:https?://(?:[\w-]+\.)+[\w-]+(?:/[\w./?%&=-]*)?。在实际使用中,如果需要从文本中提取URL,需要注意URL可能以http://https://www.开头,域名部分支持连字符和点号,路径部分可能包含各种特殊字符。

JavaScript中使用正则表达式有两种方式:
字面量/pattern/flags,如 /\d+/g。适合固定模式,性能更好。
构造函数new RegExp('pattern', 'flags'),如 new RegExp('\\d+', 'g')。适合动态构建模式,注意反斜杠需要双重转义。
常用方法:test() 测试是否匹配返回布尔值;exec() 返回匹配详情(包括捕获组和索引);字符串方法 match() replace() search() split() 也支持正则参数。

调试正则表达式的最佳实践:
① 使用在线工具(如本页面的测试工具、regex101.com、regexr.com)实时查看匹配结果和捕获组。
逐步构建:从简单模式开始,逐步添加复杂度,每次验证结果。
③ 注意转义字符:确保在代码字符串中正确转义反斜杠。
④ 关注性能:避免灾难性回溯(catastrophic backtracking),例如避免嵌套量词如 (a+)+b
⑤ 使用注释模式(部分语言支持):在复杂正则中添加注释和空白,提高可读性。
⑥ 编写单元测试:用多个测试用例验证正则的正确性,包括边界情况。