- 推荐一个正则表达式测试网站(也可以学习,但是主要是对写的正则做解释的功能很舒服):https://regexr-cn.com/
其他语言中,\
与后面的字符合起来就表示转义或者插入特殊字符
Java中,\
表示在正则表达式中插入特殊字符,所以需要转义时需要写\\
,所以要匹配换行符需要使用\\n
,插入一个反斜杠要使用\\
下表中反斜杠含义以通用为准(非Java),斜体字表示某个特殊模式,而不是该字符串本身
模式 | 含义 | 备注 |
---|---|---|
\ | 将下一字符标记为特殊字符、文本、反向引用或八进制转义符 | \n 匹配换行符,\\ 匹配反斜杠,\. 匹配点,\( 匹配括号 |
^ | 匹配字符串开始位置 | 如果设置了RegExp 对象Multiline 属性,^还会与\n 或\r 之后的位置匹配 |
$ | 匹配字符串结束位置 | 如果设置了RegExp 对象Multiline 属性,$还会与\n 或\r 之前的位置匹配 |
* | 零次或多次匹配前面的字符或子表达式 | * 等效于 {0,} |
+ | 一次或多次匹配前面的字符或子表达式 | + 等效于 {1,} |
? | 零次或一次匹配前面的字符或子表达式 | ? 等效于 {0,1} |
{n} | n 是非负整数。正好匹配 n 次 | |
{n,} | n 是非负整数。至少匹配 n 次 | |
{n,m} | m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次 | m 和 n 之间的逗号两侧不能插入空格 |
? | 在任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是”非贪心的” | “非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo" 中,"o+?" 只匹配单个”o”,而"o+" 匹配所有”o”。 |
. | 匹配除\r、\n之外的任何单个字符 | 若要匹配包括”\r\n”在内的任意字符,请使用诸如”[\s\S]”之类的模式 |
(pattern) | 成组匹配 pattern 并捕获该匹配的子表达式 | 创建子表达式或者一个引用,引用供下面所说 \n 模式来引用 |
(?:pattern) | 成组匹配 pattern,但不捕获该匹配的子表达式 | |
(?=pattern) | 成组先行搜索匹配 pattern ,但不捕获该匹配 | 先行搜索会匹配 pattern,但是不消耗该 pattern 作为匹配到的表达式。“消耗”指匹配到对应模式的字符串后,下次搜索匹配就从该字符串之后开始。这里不消耗就是下次搜索匹配从 pattern 内开始 |
(?!pattern) | 成组先行搜索不匹配 pattern ,但不捕获该匹配 | |
x|y | 匹配 x 或 y | 例如,`”z |
[xyz] | 字符集。匹配包含的任一字符 | 例如,"[abc]" 匹配"plain" 中的"a" |
[^xyz] | 反向字符集。匹配未包含的任何字符 | 例如,"[^abc]" 匹配"plain" 中"p" ,"l" ,"i" ,"n" |
[a-z] | 字符范围。匹配指定范围内的任何字符 | |
[^a-z] | 反向范围字符。匹配不在指定的范围内的任何字符 | |
\b | 匹配一个字边界,即字与空格间的位置 | 例如,"er\b" 匹配"never" 中的"er" ,但不匹配"verb" 中的"er" |
\B | 非字边界匹配 | 例如,"er\b" 匹配"verb" 中的"er" ,但不匹配"never" 中的"er" |
\cx | 匹配 x 指示的控制字符 | 例如,\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 之间。如果不是这样,则假定 c 就是”c”字符本身。 |
\d | 数字字符匹配 | \d 等效于 [0-9] |
\D | 非数字字符匹配 | \D 等效于 [^0-9] |
\f | 换页符匹配 | \f 等效于 \x0c 和 \cL |
\n | 换行符匹配 | \n 等效于 \x0a 和 \cJ |
\r | 匹配一个回车符 | \r 等效于 \x0d 和 \cM |
\s | 匹配任何空白字符 | 空白字符,包括空格、制表符、换页符等。\s 等效于[ \f\n\r\t\v] |
\S | 匹配任何非空白字符 | \S 等效于[^ \f\n\r\t\v] |
\t | 制表符匹配 | \t 等效于 \x09 和 \cL |
\v | 垂直制表符匹配 | \v 等效于 \x0b 和 \cK |
\w | 匹配任何字类字符,包括下划线 | \w 等效于[A-Za-z0-9_] |
\W | 与任何非单词字符匹配 | \W 等效于[^A-Za-z0-9_] |
\xn | 匹配 n,此处的 n 是一个十六进制转义码 | 十六进制转义码必须正好是两位数长。例如,"\x41" 匹配"A" 。"\x041" 与"\x04"&"1" 等效 |
\num | 匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用 | 例如,(.)\1 匹配两个连续的相同字符,其中(.) 表示换行外任意一个字符,\1 表示对第1个分组(.) 匹配到的字符再引用一次,可以匹配到"daazzz" 中的"aa" 和3-4位置的"zz" 。(\w)(.)a\2 匹配到" dads hgagx" 中的"hgag" 而匹配不到" dad" |
\n | 标识一个八进制转义码或反向引用 | 如果 \n 前面至少有 n 个捕获子表达式,那么 n 是上述的反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码 |
\nm | 标识一个八进制转义码或反向引用 | 如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是上述的反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是上述的反向引用,后面跟有字符 m。如果两种前面的情况都不存在,则 \nm 匹配八进制值 nm,其中 n 和 m 是八进制数字 (0-7) |
\nml | 标识一个八进制转义码 | 只有当 n 是八进制数 (0-3),m 和 l 是八进制数 (0-7) 时,匹配八进制转义码 nml,其余与上述分析相同 |
\un | 匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符 | 例如,\u00A9 匹配版权符号 (©) |