- 推荐一个正则表达式测试网站(也可以学习,但是主要是对写的正则做解释的功能很舒服):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 匹配版权符号 (©) |