## 正则表达式
其实正则表达式不难,主要是记忆方面的问题。使用过几次之后,常用的符号就可以记住了。下面是我个人整理的一些常用的表达式和示例解释,供自己后面参考。
参考资料:
> Java核心技术 卷II 第二章 输入与输出 P107
> [百度百科-正则表达式](https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin)
> [菜鸟教程-正则表达式](http://www.runoob.com/regexp/regexp-syntax.html)
下面的规则基于java。
**字符**
表达式 | 描述 | 示例
---|---|---
c | 一般字符c,除.*+?{|()[\^$之外 | abc
. | 点,可以匹配任何除行终止符之外的字符,或者在DOTALL标志被设置时表示任意字符 | a.c:可匹配abc/acc
\c | 字符c不在 [A-Za-z0-9]范围内,用\转义。`注意,在java内因为\有转义含义,所以需要使用\再次转义。如\\\d`
\x{p} | 十六进制码为p的Unicode码点 | \x{1D546}
**字符类**
+ 字符类(character class)是一个括在中括号中的可选择的字符集,例如,[Jj]、[0-9]、[A-Za-z]、[^0-9]。这里的“-”表示的是一个范围,而^表示的是补集
+ 如果字符类中包含“-”,那么他必须是第一项或者最后一项;如果要包含“[”,那么他必须是第一项;如果包含“^”,那么它可以是除了开头以外的任何位置。其中只需要转义“[”和“\”。
表达式 | 描述 | 示例
---|---|---
[C1C2...] | 任何由C1, C2, ...表示的字符 | [0-9+-]
[^...] | 某个字符类的补集 | [^0-9]
[...&&...] | 字符类的交集 | [\d*&&[a-z]]
\d,\D | 数字[0-9];它的补集 | \d+:是一个数字序列
\w,\W | 单词字符[a-zA-Z0-9];它的补集 |
\s,\S | 空格([\n\r\t\f\x{8}) | \s*,\s*:是由可选的空格符包围的逗号
**序列和选择**
表达式 | 描述 | 示例
---|---|---
XY | 任何X的字符串,后面紧跟Y字符串 | [1-9][0-9]*:没有前导0的正整数
X\|Y | 任何X或Y中的字符串 | 0\|1
**量词**
表达式 | 描述 | 示例
---|---|---
X? | 可选X,X出现0或1次 | \\+?:可选的+号
X*, X+ | 0个或多个X;1个或多个X | [1-9][0-9]+是大于10的整数
X{n}, X{n,}, X{n, m} | n个X;至少n个X;n到m个X | [0-7]{1, 3}是一位到三位的八进制数
**群组**
表达式 | 描述 | 示例
---|---|---
(X) | 捕获X的匹配 | '([^']*)':匹配用单引号引用的文本
【笔记】《Java核心技术 卷II》正则表达式