1、对于正则表达式的理解
正则表达式,顾名思义,“正”,正确的,则,“规则的”,就是符合正确的规则的表达式。其定义为:指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则,有自己特殊的应用。从定义上看,也可以得知,正则表达式的本质就是“符合一定规则的字符串"。
2、正则表达式的规则
(1):字符类
[abc]:表示出现a,b或c中的任意一个。
[^abc]:表示除了a,b,c以外的字符。
[a-zA-Z]:包括了26个英文字母,不论是大写还是小写。
[0-9]:包括了0-9这10个数字字符。
(2):预定义字符类
. 任意字符
\d 数字[0-9]
\D 非数字[^0-9]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
(3):边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
(4):Greedy 数量词
x? 0次或1次
x* 0次或多次
x+ 1次或多次
x{n} 恰好n次
x{n,} 至少n次
x{m,n} 至少m次,但不能超过n次
3、正则表达式的应用
比如,模拟一下登录QQ时验证QQ号码的功能,首先,我们要求(1)号码不能以0开头,(2)号码为6-12位:
用普通方法验证:
public class RegexDemo {
public static void main(String[] args) {
// 封装键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请输入QQ号码:");
//读取输入信息
String qq = sc.nextLine();
//调用方法并记录返回布尔值
boolean flag = checkQq(qq);
//打印是否通过验证
System.out.println(flag);
}
//定义验证QQ号码方法
private static boolean checkQQ(String qq) {
boolean flag = true;
//长度验证
if (qq.length() >= 6 && qq.length() <= 12) {
//验证是否以0开头
if(!qq.startsWith("0")){
//数字验证
//将字符串转换为字符数组
char[] chs = qq.toCharArray();
//增强for循环遍历
for(char ch : chs){
if(!(ch>='0' && ch<='9')){
flag = false;
break;
}
}
}else{
flag = false;
}
} else {
flag = false;
}
return flag;
}
}
利用正则表达式验证:
public class RegexDemo {
public static void main(String[] args) {
//调用方法并记录、打印返回值
boolean flag = checkQQ(qq);
System.out.println(flag);
}
//定义验证方法
private static boolean checkQQ(String qq) {
//定义正则表达式
String regex = "[1-9][0-9]{5,11}";
//验输入字符串是否符合正则表达式
boolean flag = qq.matches(regex);
//返回布尔值
return flag;
哈哈,非常明显的发现运用正则表达式的方法更加简洁明了,下面来解析一下这句String regex = "[1-9][0-9]{5,11}",这个正则表达式总共有两部分组成 ,其中第一部分{1-9}说明输入字符串的首个字符必须为1-9之间的数字字符;第二部分由[0-9]{5,11}组成,表示字符串第一个字符之后的输入内容必须为0-9中的数字字符,且出现次数必须为5-11次内。
小结:正则表达式的本质就是”符合一定规则的字符串,通过举例也可以发现,正则表达式比普通方法要简洁明了,更加实用。