本文不是一个完整的正则表达式的教程,仅适用于已掌握正则表达式语法,需要进行规则速查的开发人员。
一、元字符
| 字符 | 说明 |
|---|---|
| ^ | 一行开始 |
| $ | 一行结束 |
| \b | 单词的开始或结束 |
| . | 除换行符外的任意字符 |
| \w | 单词字符(包括字母、数字、下划线和汉字) |
| \W | 任意的非单词字符(包括字母、数字、下划线和汉字) |
| \s | 任意的空白字符,如空格、制表符、换行符、中文全角空格等 |
| \S | 任意的非空白字符 |
| \d | 任意的数字 |
| \D | 任意的非数字字符 |
二、字符集合
| 字符集合 | 说明 |
|---|---|
| [aeiou] | aeiou 字符集中的任何字符 |
| [^aeiou] | 除 aeiou 字符集之外的字符 |
| [0-9a-z] | 字符集合 0 到 9,a 到 z 中的任何字符 |
| [^0-9a-z] | 除字符集合 0 到 9, a 到 z 中的任何字符 |
三、限定符
| 字符 | 说明 |
|---|---|
| {n} | 重复次数=n 次 |
| {n,} | 重复次数>=n 次 |
| {n,m} | n<=重复次数<=m |
| * | 重复次数>=0 |
| + | 重复次数>=1 |
| ? | 0<=重复次数<=1 |
| *? | 尽可能少地使用重复的第一个匹配 |
| +? | 尽可能少地使用重复但至少使用一次 |
| ?? | 使用零次重复(如有可能)或一次重复 |
四、分组
分组又称为子表达式,即把一个正则表达式的全部或部分分成一个或多个组。其中,分组使用的字符为(和),即左圆括号和右圆括号。分组之后,可以将字符为(和)之中的表达式看成一个整体来处理。
以下正则表达式可以匹配重复出现字符串“abc”一次或两次的字符串。此时,表达式将“abc”看成一个整体来进行重复匹配。
1 | (abc){1,2} |
当一个正则表达式被分组之后,每一个组将自动被赋予一个组号,该组号可以代表该组的表达式。
其中,组号的编制规则为:从左到右、以分组的左括号(为标志,第一个分组的组号为 1,第二个分组的组号为 2,以此类推。
可以使用 \数字 的方式来引用分组。如\1,\2。
五、贪婪与非贪婪
比如说匹配输入串 A: 101000000000100
使用1.*1将会匹配到 1010000000001, 匹配方法: 先匹配至输入串 A 的最后, 然后向前匹配, 直到可以匹配到 1, 称之为贪婪匹配。
使用1.*?1将会匹配到 101, 匹配方法: *匹配下一个 1 之前的所有字符, 称之为非贪婪匹配。
所有带有量词的都是非贪婪匹配: .*?, .+?, .{2,6}?, .??。