正则的意义
正则对于平时的开发工作是非常有意义的,如果不用正则有可能你需要复杂的逻辑去完成一个需求。然而,使用正则的时候经常会骂娘, 为什么骂娘? 无非两个原因: 一、看不懂了。二、忘记了规则实在写不出来。 其实,如果不是特别经常使用正则确实会忘的比较厉害。但是,如果你对正则进行一个深入的理解,是有助于长期记忆的。
正则表达式组成

如上图: 正则表达式有三部分组成: 字符、 数量限定符和位置限定符。掌握它的结构就非常容易看懂和写出正确的表达式。
字符
| 字 符 |
含 义 |
栗 子 |
| . |
匹配任意字符 |
G.CD 可以配 GACD, GbCD, 但不匹配 GCD |
| [ ] |
匹配括号中的任意一个字符 |
[abc]d 匹配 ad, bd, cd |
| - |
在[]内部使用,表示范围 |
[0-9], [a-zA-Z] |
| ^ |
括号内的开头,表示匹配除括号内的字符以外的任一字符; 不在括号内使用,标识匹配开头 |
[^wgc]匹配除 wgc 之外的任一字符 |

数量限定符
| 数量限定符 |
含义 |
栗子 |
| ? |
匹配一次或者零次其前边的单元 |
[0-9].[0-9]? 匹配小数点后可以有一个或0个0-9的数字 |
| + |
匹配一次或多次其前边的单元 |
wgc@[a-zA-Z]+匹配 wgc@之后有一个或多个字母 |
| * |
匹配零次或多次其前边的单元 |
[0-9]* 匹配至少一位数字 |
| {N} |
匹配 N 次其前边的单元 |
[1-9][0-9]{2} |
匹配100~999的三位数 |
| {N, } |
匹配至少 N 次其前边的单元 |
|
| {, N} |
匹配最多 N 次其前边的单元 |
|
| {N, M} |
匹配最少 N 次,最多 M 次其前边的单元 |

位置限定符
| 位置限定符 |
含义 |
栗子 |
| ^ |
匹配行守位置 |
^Android 匹配行首为 Android |
| $ |
匹配行尾位置 |
Android$ 匹配已 Android 结尾 |
| \< |
匹配单个词开头的位置 |
\<wgc 匹配 wgcabcd 但是不匹配 wg cabcd |
| \> |
匹配单个词结尾的位置 |
wgc> |
| \b |
匹配单个词开头或结尾的位置 |
\bwgc\b 匹配 wgc 但不匹配 wgcisok |
| \B |
匹配非单词开头或者结尾的位置 |
\Bwgc\B 匹配 abcwgcab 不匹配 wgcab |

特殊字符串
| 特殊字符 |
含义 |
栗子 |
| \ |
转义字符 |
|
| () |
将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符 |
([0-9]{1,3}.){3}[0-9]{1,3}匹配 ip 地址 |
| 或 |
逻辑或 |
|
| s |
空白字符:[ \t\n\x0B\f\r] 常用 |
|
| \t |
制表符 (‘\u0009’) |
|
| \n |
新行(换行)符 (‘\u000A’) |
|
| \r |
回车符 (‘\u000D’) |
|
| \f |
换页符 (‘\u000C’) |
|
| \a |
报警 (bell) 符 (‘\u0007’) |
|
| \e |
转义符 (‘\u001B’) |
|
| \cx |
对应于 x 的控制符 |