正则表达式的所支持的合法字符
字符 | 解释 |
---|---|
x | 字符x可以代表任何字符 |
\0mnn | 八进制数 0mnn所表示的字符 |
\xhh | 十六进制0xhh所表示的字符 |
\uhhhh | 十六进制值0xhhhh所表示的 UNICODE字符 |
\t | 制表符("\u0009") |
\n | 换行符(“\u000A”) |
\r | 回车符(“\000D”) |
\f | 换页符(“\u000C”) |
\a | 报警(bell)符(“\u0007”) |
\e | Escape符(“\u001B”) |
\cx | x对应的控制符。例如,\cM 匹配 Ctrl-M. x值必须为AZ或az之间 |
正则表达式中的特殊字符
特殊字符 | 说明 |
---|---|
$ | 匹配一行的结尾。要匹配$字符本身,请使用\$ |
^ | 匹配一行的开头。要匹配^字符本身,请使用\^ |
() | 标记子表达式的开始和结束位置。要匹配这些字符请使用\(和\) |
[] | 用于确定中括号表达式的开始和结束位置。要匹配这些字符,请使用\[和\] |
{} | 用于标记前面子表达式出现的频度。要匹配这些字符,请使用\{和\} |
* | 指定前面子表达式可以出现零次或多次。要匹配*字符本身,请使用\* |
+ | 指定前面子表达式可以出现一次或多次。要使用+字符,请使用\+ |
? | 指定前面子表达式出现零次或一次。要匹配?字符本身,请使用\? |
. | 匹配除换行符 \n 之外的任何单字符。要匹配. ,请使用\. |
\ | 用于转义下一个字符,或指定八进制、十六进制字符。要匹配 .字符,请使用\\ |
| | 指定两项之间任选一项。要匹配|字符本身,请使用\| |
通配符是可以匹配多个字符的特殊字符。正则表达式中的“通配符”被称为预定义符
预定义符 | 说明 |
---|---|
. | 可以匹配任意字符 |
\d | 匹配0-9所有字符 |
\D | 匹配非数字 |
\s | 匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符 |
\S | 匹配所有非空白字符 |
\w | 匹配所有单词字符,包括0-9所有数字、26个英文字母和_ |
\W | 匹配所有非单词字符 |
关于记忆:d是digit的意思 ,代表数字;s是space的意思,代表空白;w是word的意思,代表单词。大写则代表匹配与之相反的字符。
在一些特殊情况,例如,只想匹配a~f的字符,或者匹配处理ab之外的所有小写字符,或者匹配中文字符,上面这些预定义字符就无能为力了,此时就用到了方括号表达式。
方括号表达式 | 说明 |
---|---|
表示枚举 | 例如[abc],表示a、b、c其中任何一点字符:[gz],表示g、z其中任意一个字符 |
表示范围:- | 例如[a-f],表示a~f范围内的任意字符:[\\u0041-\\u0056]范围内的字符。范围可以和枚举结合使用,如[a-cx-z],表示a~c、x~z范围内的任意字符 |
表示求否^ | 例如[^abc],表示非a、b、c的任意字符;[^a-f]表示不是a~f的任意字符 |
表示与运算 && | 例如:[a-z&&[def]]表示a~z与[def]之间的交集,即d、e或f |
表示并运算 | 并运算与前面的枚举类似。如[a-d[m-p]],表示[a-dm-p] |
正则表达式还支持圆括号表达式,用于将多个表达式组成一个子表达式,圆括号中可以使用或运算符。例如:(public|protected|private)用于匹配java中的三个访问控制运算符。
还支持边界匹配符
边界匹配符 | 说明 |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词的边界 |
\B | 非单词的边界 |
\A | 输入的开头 |
\G | 前一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符 |
\z | 输入的结尾 |
正则表达式还提供了数量表示符,如下:
贪婪模式 | 勉强模式 | 占有模式 | 说明 |
---|---|---|---|
X? | X?? | X?+ | X表达式出现一次或零次 |
X* | X*? | X*+ | X表达式出现零次或多次 |
X+ | X+? | X++ | X出现一次或多次 |
X{n} | X{n}? | X{n}+ | X表达式出现n次 |
X{n,} | X{n,}? | X{n,}+ | X最少出现n次 |
X{n,m} | X{n,m}? | X{n,m}+ | X表达式最少出现n次,最多出现m次 |
关于三种模式:
Greedy(贪婪模式):数量表示符,默认采用贪婪模式,除非另有表示。贪婪模式的表达式会一直匹配下去,直到无法匹配为止。
Reluctant(勉强模式):问号后缀(?)表示,它只会匹配最少的字符。也称为最小匹配模式。
Possessive(占有模式):用加号后缀(+)表示,目前只有Java支持占有模式,通常比较少用
——《疯狂Java》