正则表达式
Posted 月色深潭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
正则表达式所支持的合法字符
合法字符 | 说明 |
x | 字符x(x可代表任何合法的字符) |
\0mnn | 八进制数0mnn所表示的字符 |
\xhh | 十六进制值0xhh所表示的字符 |
\uhhhh | 十六进制值0uhhhh所表示的Unicode字符 |
\t | 制表符(‘\u0009‘) |
\n | 换行符(‘\u000A‘) |
\r | 回车符(‘\u000D‘) |
\f | 换页符(‘\u000C‘) |
\a | 报警符(‘\u0007‘) |
\e | Escape符(‘\u001B‘) |
\cx | x对应的控制符,例如\cM匹配Ctrl-M。 |
正则表达式中的特殊字符
特殊字符 | 说明 | 匹配本身书写方式 |
. | 匹配除了换行符\n之外的任何单字符 | \. |
$ | 匹配一行的结尾 | \$ |
^ | 匹配一行的开头 | \^ |
[] | 用于确定中括号表达式的开始和结束位置 | \[ \] |
() | 标记子表达式的开始和结束位置 | \( \) |
{} | 用于标记前面子表达式的出现频率 | \{ \} |
* | 指定前面子表达式可以出现零次或多次 | \* |
+ | 指定前面子表达式可以出现一次或多次 | \+ |
? | 指定前面子表达式可以出现零次或一次 | \? |
\ | 用于转义下一个字符,或指定八进制、十六进制字符 | \\ |
| | 指定两项之间任选一项 | \| |
预定义字符
预定义字符 | 说明(匹配一个字符) |
. | 可以匹配任何字符 |
\d | 匹配0~9的所有数字 |
\D | 匹配非数字 |
\s | 匹配所有空白字符,包括空格、制表符、回车符、换页符、换行符等 |
\S | 匹配所有非空白字符 |
\w | 匹配所有的单词字符,包括0~9所有数字、26个英语字母和下划线(_) |
\W | 匹配所有的非单词字符 |
方括号表达式
例子 | 用途 | 说明 |
[acd] | 表示枚举 | 表示匹配acd中任意一个字符 |
[a-f] | 表示范围 | 表示匹配a~f中任意一个字符 |
[^acd] | 表示求否 | 表示匹配非acd的任意一个字符 |
1. [a-z&&[def]] 2. [a-z&&[^bc]] 3. [a-z&&[^m-p]] |
表示“与”运算 |
1.表示求a~z和def的交集,最终匹配def中任意一个字符 2.表示求a~z和非bc字符的交集,最终匹配在a~z中非bc的任意一个字符,即[ad-z] 3.表示求a~z和非m-p字符的交集,最终匹配在a~z中非m-p的任意一个字符,即[a-lq-z] |
[a-d[m-p]] | 表示“并”运算 | 和枚举类似,同[a-dm-p] |
边界匹配符
边界匹配符 | 说明 |
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词的边界 |
\B | 非单词的边界 |
\A | 输入的开头 |
\G | 前一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符 |
\z | 输入的结尾 |
三种模式的数量表示符
贪婪模式(一致匹配下去,直到无法匹配) | 勉强模式(匹配最少的字符) | 占用模式(只有java支持) | 说明 |
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次 |
总结:
1.在使用正则表达式匹配的过程中,都是按照字符串中的字符,从前往后逐个匹配的。
2.单个预定义字符、单个方括号表达式都是匹配单个字符。如果加上数量表示符,就可以简化正则表达式的书写。
例如需要匹配一个138开头的手机号,如果不用数量表示符,就应该这样写138\\d\\d\\d\\d\\d\\d\\d\\d,如果采用数量表达式,就可以这样表示138\\d{8}
3.正则表达式的书写方式都是从前往后单个字符、单个预定义字符、单个方括号表达式来组合书写,其中会插入边界匹配符以及数量表示符。
4.除了上面表格中指定的字符,其他字符如果在正则表达式中出现,一律作为普通字符对待。
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章