目录
一、概念
总结为:正确的规则匹配
正则表达式用来操作字符串数据
二、应用需求
校验QQ号:定义一个功能对QQ号进行校验,长度5~15,只能是数字,0不能开头。
纯Java代码编写:
public static void chekeQQ(String qq) {
int len = qq.length();
if (len >= 5 && len <= 15) {
if (!qq.startsWith("0")) {
try {
long l = Long.parseLong(qq);
System.out.println(l + ":正确");
} catch (NumberFormatException e) {
System.out.println(qq + ":含有非法字符");
}
} else {
System.out.println(qq + ":不能0开头");
}
} else {
System.out.println(qq + ":长度错误");
}
}
测试:
public static void main(String[] args) {
String qq = "01234567";
chekeQQ(qq);
}
使用正则表达式:
分析第一位不能使用0,第二位是0-9,整体长度是5-15。接下来编写正则
[1-9][0-9]{4,14}
编写代码并测试:
public static void main(String[] args) {
String qq = "01234567";
//正则表达式规则
String rege="[1-9][0-9]{4,14}";
//使用字符串的matches方法
boolean b = qq.matches(rege);
System.out.println(qq+":"+b);
}
二、常见的正则规则
在API中有java.util.regex.Pattern类,Pattern类描述了一些正则规则和常用的方法。
字符类 | |
---|---|
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]] | a 到 d 或 m 到 p:[a-dm-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](减去) |
预定义字符类 | |
---|---|
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
边界匹配器 | |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
Greedy 数量词 | |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
在我们的QQ验证中就用到了数量次数X{n,m}。
现在以数量词为示例演示一些正则规则
1、一次或一次也没有
X? | X,一次或一次也没有 |
单词 "o" 在str中只能出现一次。
String str="aob";
String pattern="ao?b";
boolean matches = str.matches(pattern);
System.out.println(str+":"+matches);
String str="aoooob";
String pattern="ao?b";
boolean matches = str.matches(pattern);
System.out.println(str+":"+matches);
2、X 至少出现n此,但是不超过m次
X{n,m} | X,至少 n 次,但是不超过 m 次 |
String str="aoooob";
String pattern="ao{2,4}b";
boolean matches = str.matches(pattern);
System.out.println(str+":"+matches);