正则表达式
正则表达式其实是由一些特殊的符号组成的,它代表的是某种规则。
正则表达式的作用:
- 用来校验字符串数据是否合法
- 可以从一段文本中查找满足要求的内容
正则表达式的好处
我们就以QQ号码为例
不使用正则表达式,校验QQ号码代码是这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public static boolean checkQQ(String qq){ if(qq == null || qq.startsWith("0") || qq.length() < 6 || qq.length() > 20){ return false; }
for (int i = 0; i < qq.length(); i++) { char ch = qq.charAt(i); if(ch < '0' || ch > '9'){ return false; } } return true; }
|
用正则表达式代码是这样的
1 2 3
| public static boolean checkQQ1(String qq){ return qq != null && qq.matches("[1-9]\\d{5,19}"); }
|
我们发现,使用正则表达式,大大简化的了代码的写法。
正则表达式的书写格式
字符类(只匹配单个字符)
1 2 3 4 5 6 7
| [abc]: 只能是a,b,或c [^abc]: 除了a,b,c之外的任何字符 [a-zA-z]: a到z,A到z, 包括(范围) [a-d[m-p]]: a到d,或m到p [a-z&&[def]]: d,e,或f(交集) [a-z&&[^bc]]: a到z,除了b和c(等同于[ad-z]) [a-z&&[^m-p]]: a到z,除了m到p(等同于[a-lq-z])
|
注意:以上带[内容]
的规则都只能用于匹配单个字符
示例:System.out.println("ab".matches("[a-zA-z]")) //输出false
预定义字符(只匹配单个字符)
1 2 3 4 5 6 7
| . : 任何字符 \d : 一个数字:[0-9] \D : 非数字:[^0-9] \s : 一个空白字符: \S : 非空白字符:[^\s] \w : [a-zA-z_0-9] \W : [^\w]一个非单词字符
|
\d{9} //代表判断是否有9个[0-9]的数字
数量词
1 2 3 4 5 6
| X? : X,一次或0次 X* : X,零次或多次 X+ : X,一次或多次 X {n} : X,正好n次 X {n, } : X,至少n次 × {n, m} : X,至少n但不超过m次
|
链接
封面图来源:https://www.pixiv.net/artworks/75941927