正则表达式 regex
- 常用来 校验用户的输入 是否合法(和提前定义的模式是否匹配)
1,匹配子表达式出现的次数
? * + {n} {n,} {n,m}
public static void main(String[] args) {
String str = "javaaaaaaa";
// * 前面的子表达式 出现0或者多次
boolean flag1 = str.matches("java*");
//+ 至少出现一次
boolean flag2 = str.matches("java+");
// ? 0或1
boolean flag3 = str.matches("java?");
// {n} 匹配确定的 n 次。
boolean flag4 = str.matches("java{3}");
// {n,} 至少出现n次
boolean flag5 = str.matches("java{3,}");
//{n,m} 至少出现 n次且小于等于m次
boolean flag = str.matches("java{3,6}");
System.out.println(flag);
}
单个\ 表示为转义字符 \ \ 表示的是\
2,匹配数字 字母字符 空格
public static void method2() {
String str = "abc123";
System.out.println(str);
// \d 用来匹配数字字符的 [0-9]
boolean flag1 = str.matches("\\d{11}");
// \w 匹配字符 [A-Za-z0-9]
boolean flag2 = str.matches("\\w{5}\\w{3}");
// \s 匹配任何空白字符 \t\n\f\v
boolean flag3 = str.matches("\\w{5}\\s{1}\\w{3,}");
// . 匹配任何字符 除了换行\n \r \\.表示匹配普通的点
boolean flag = str.matches(".+");
// boolean flag = str.matches("\\.+");
System.out.println(flag);
}
3,[ ] 匹配
// [] 只匹配一个
public static void method3() {
String str = "j2va";
// [abc] 字符集合。匹配所包含的任意一个字符。
boolean flag1 = str.matches("j[abc]va");
// [^abc] 负值字符集合。匹配除了括号中的任意字符。
boolean flag2 = str.matches("j[^abc]va");
// [a-z] [A-Z] [0-9] 范围匹配
boolean flag = str.matches("j[0-9]va");
System.out.println(flag);
}
练习 匹配手机号
public static void method4() {
//匹配手机号
//1[356789]\\d{9}
String str = "13567892346";
boolean flag = str.matches("^1[3-9]\\d{9}$");
System.out.println(flag);
}
4,分组
// 分组
public static void method5() {
String str = "23423@qq.com";
boolean flag = str.matches("");
// 编译
Pattern p = Pattern.compile("(\\w+)@(\\w+)\\.com");
Matcher m = p.matcher(str);
System.out.println(m.matches());
if (m.matches()) {
// 1表示第一组
String group = m.group(2);
System.out.println(group);
}
}
练习 邮箱匹配
/**
* 邮箱匹配
*/
public static void method6() {
String email = "666@sina.cn.com";
String regEx = "^[a-z0-9A-Z]+[-|a-z0-9A-Z._]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$";
System.out.println(email.matches(regEx));
}