Skip to content

Regex 令牌 详解

全部核心 Regex 令牌:锚点、字符类、量词、分组和标志。每个令牌的含义,并配一个具体匹配示例。这是 Regex Tester 工具的快速参考配套。

Regex 令牌可以组合:把锚点、字符类和量词叠加起来,就能构建一个模式。^ 固定到开头,\d 匹配数字,{2,4} 决定重复次数。把它们组合成 ^\d{2,4}$,即可匹配由两到四位数字组成的完整字符串。从左到右阅读模式,一次读一个令牌。配套的 Regex Tester 工具让你可以用自己的文本实时试验这些令牌。

参考表格 · 55 条目打开 regex-tester 工具 →
55 of 55 rows
锚点
匹配字符串开头的位置;带 m 标志时匹配行首。^He → He
匹配字符串结尾的位置;带 m 标志时匹配行尾。lo$ → lo
匹配单词边界,即单词字符与非单词字符之间的位置。\bcat\b → cat
匹配非单词边界,即两个单词字符之间或两个非单词字符之间的位置。\Bar → ar
字符类
匹配除换行符外的任意单个字符,除非设置了 s 标志。a.c → abc
匹配任意数字,0 到 9。\d → 7
匹配任意非数字字符。\D → a
匹配任意单词字符:字母、数字或下划线。\w → _
匹配任意非单词字符。\W → !
匹配任意空白字符:空格、制表符或换行符。a\sb → a b
匹配任意非空白字符。\S → a
匹配方括号内列出的任意一个字符。[aeiou] → e
匹配不在方括号列出范围内的任意字符。[^aeiou] → s
匹配给定范围内的任意单个字符,从 a 到 z。[a-z] → m
匹配包括换行符在内的任意单个字符,是让点号跨行的常用写法。[\s\S] → \n
设置 u 标志时,匹配任意文字系统中的 Unicode 字母。\p{L} → é
设置 u 标志时,匹配任意文字系统中的 Unicode 数字字符。\p{N} → ٣
转义:匹配单个换行符(line feed)。\n → line feed
转义:匹配单个制表符。\t → tab
转义:匹配单个回车符(carriage return)。\r → carriage return
匹配由两位十六进制代码表示的单个字符。\x41 → A
设置 u 标志时,匹配由给定十六进制码位表示的单个字符。\u{1F600} → 😀
类交集(需 v 标志):匹配同时属于两个集合的字符。[[a-z]&&[^aeiou]] → t
量词
匹配前一个令牌零次或多次。ab* → abbb
匹配前一个令牌一次或多次。a+ → aaa
匹配前一个令牌零次或一次,使其成为可选。colou?r → color
匹配前一个令牌恰好 n 次。a{3} → aaa
匹配前一个令牌 n 次或更多。a{2,} → aaaa
匹配前一个令牌 n 到 m 次(含边界)。a{2,4} → aaa
懒惰量词:匹配前一个令牌零次或多次,尽可能少地匹配。<.*?> on <a><b> → <a>
懒惰量词:匹配前一个令牌一次或多次,尽可能少地匹配。\d+? on 123 → 1
懒惰量词:匹配前一个令牌零次或一次,优先选择零次。ab?? on ab → a
懒惰量词:匹配前一个令牌 n 到 m 次,尽可能少地匹配。a{1,3}? on aaa → a
占有优先量词(PCRE):匹配前一个令牌零次或多次并保留结果,绝不回溯去尝试其他切分。.*+a on aaa → no match
分组与交替
捕获组:匹配该序列并记住它,供反向引用使用。(ab)+ → abab
非捕获组:匹配该序列但不记住它。(?:ab)+ → abab
正向先行断言:接下来的字符是 abc 时匹配成功,但不消耗它们。a(?=b) → a
负向先行断言:接下来的字符不是 abc 时匹配成功,但不消耗它们。a(?!b) → a
反向引用:匹配捕获组 1 所捕获的确切文本。(a)\1 → aa
交替:匹配竖线之前或之后的表达式。cat|dog → dog
命名捕获组:匹配该序列并以给定名称记住它。(?<year>\d{4}) → year = 2026
正向后行断言:前面的字符是 abc 时匹配成功,但不消耗它们。(?<=a)b → b
负向后行断言:前面的字符不是 abc 时匹配成功,但不消耗它们。(?<!a)b → b
命名反向引用:匹配命名组所捕获的确切文本。(?<w>\w+) \k<w> → the the
原子分组(PCRE):匹配该序列一次,之后绝不回溯进入其中。(?>a+)ab on aab → no match
分支重置(PCRE):每个分支复用相同组编号的交替。(?|(cat)|(dog)) → \1 = dog
标志
全局标志:查找字符串中的每一个匹配,而不只是第一个。/a/g on aaa → a, a, a
忽略大小写标志:匹配时不区分字母大小写。/Hi/i → hi
多行标志:把 ^ 和 $ 视为每一行的开头和结尾。/^a/m matches at the start of each line
dotall 标志:让点号也能匹配换行符。/a.b/s → a\nb
Unicode 标志:把模式和输入都当作 Unicode 码位处理。/\u{1F600}/u → 😀
粘性标志:只在 lastIndex 设定的确切位置上匹配。/ab/y matches only at lastIndex
indices 标志:把每个匹配的起止位置加入结果。/b/d on abc → indices [1, 2]
Unicode sets 标志:比 u 更严格,还允许在字符类内进行集合运算。/[a-z&&[^aeiou]]/v → t
扩展标志(PCRE):忽略模式中未转义的空白和 # 注释。/a b/x → ab