目录
01_正则表达式概念及基本使用
-
概念
- 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种 规则。有自己特殊的应用。
-
作用
- 主要是用来做表单的内容的规则校验
-
基本使用
-
需求
- 键盘录入一个qq号码,要求该号码长度在5~15之间,不能以0开头,必须全部都是数字
-
代码实现
- 传统方式
Scanner scanner = new Scanner(System.in); while (true) { System.out.println("请输入您的qq号码:"); String qqStr = scanner.nextLine(); //判断qq号码的长度 if (qqStr.length() >= 5 && qqStr.length() <= 15) { if (!qqStr.startsWith("0")) { //获取字符串中每一个字符 boolean isNum = true;//记录是否是一个数字,只要字符串中有一个字符不是数字,那么就为false for (int i = 0; i < qqStr.length(); i++) { char chr = qqStr.charAt(i); //判断字符是否是数字 //12ac345 if (!Character.isDigit(chr)) { //该字符不是一个数字 isNum = false; break; } } //判断字符串是否都是数字 if (isNum) { System.out.println("您的qq号,很棒哟~~~"); } else { System.out.println("必须都是数字"); } } else { System.out.println("不能以0开头"); } } else { System.out.println("qq号码的长度不对!"); } }
- 正则表达式
Scanner scanner = new Scanner(System.in); while (true) { System.out.println("请输入您的qq号码:"); String qqStr = scanner.nextLine(); //qq号正则表达式 String reg = "[1-9]{1}[0-9]{4,14}"; System.out.println( qqStr.matches(reg) ? "qq号很不错哟~~~" : "qq号格式有误!" ); }
-
02_正则表达式之字符类
- 概念
- 规定字符串的内容!
- 常见规则
- [abc]
- 任意一个字符,要么是a,要么是b,要么是c
- [^abc]
- 任意一个字符串,不可以是a、b、c
- [a-zA-Z]
- 任意一个字符,范围在:a-z之间或A-Z之间
- [0-9]
- 任意一个字符,范围在0-9之间
- [abc]
- 注意事项
- 只要没有标明长度,那么默认长度就是1!!!
03_正则表达式之预定义字符类
-
概念
- 一些有特定含义的表达式
-
作用
- 减少编写正则表达式的麻烦
-
常见预定义字符
. 任何字符。 \d 数字:[0-9] \D 非数字:[^0-9] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s]
-
代码实现
// . 任何字符。 String reg1 = "."; System.out.println(">a".matches(reg1)); // \d 数字:[0-9] String reg2 = "\\d"; System.out.println("11".matches(reg2)); // \D 非数字:[^0-9] String reg3 = "[^0-9]"; System.out.println("a".matches(reg3)); String reg4 = "\\D"; System.out.println("1".matches(reg4)); // \w 单词字符:[a-zA-Z_0-9] String reg5 = "\\w"; System.out.println("_".matches(reg5)); String reg6 = "[a-zA-Z0-9_]"; System.out.println("_".matches(reg6)); // \W 非单词字符:[^\w] String reg7 = "[^a-zA-Z0-9_]"; System.out.println("a".matches(reg7)); String reg8 = "[^\\w]"; System.out.println("!".matches(reg8)); String reg9 = "[\\W]"; System.out.println("!".matches(reg9)); // \s 空白字符:[ \t\n\x0B\f\r] String reg10 = "\\s"; System.out.println(" ".matches(reg10)); // \S 非空白字符:[^\s] String reg11 = "\\S"; System.out.println("!".matches(reg11));
-
注意事项
-
正则表达式中,如果没有写[],那么就会给每一个字符加[]
-
比如:
"abc" == "[a][b][c]"
-
代码实现
String reg1 = "[abc]";//任意一个字符,要么是a、b、c String reg2 = "[a][b][c]";//等价于"abc" ,正则表达式中,如果没写[],会给每个字符加[]!!! System.out.println("a".matches(reg1));//true System.out.println("a".matches(reg2)); System.out.println("---------------"); System.out.println("abc".matches(reg1));//false System.out.println("abc".matches(reg2));//true
-
04_正则表达式之数量词
-
概念
- 规定某一个字符的长度
-
常见数量词
- X:要么是一个字符类、要么是一个预定义字符类
X?:X,要么只有一个,要么没有 X*:X,从0次到多次 X+:X,从1次到多次 X{n}:X,正好n次 X{n,}:X,从n次到多次 X{n,m}:X,从n次到m次
-
代码实现
// X? :X,一次或一次也没有 String reg1 = "[a]?";//要么是“a”要么什么都没有 System.out.println("aaa".matches(reg1)); // X* :X,零次到多次 String reg2 = "[a]*"; System.out.println("b".matches(reg2)); // X+ :X,一次到 多次 String reg3 = "[a]+"; System.out.println("".matches(reg3)); // X{n} :X,恰好 n 次 String reg4 = "[ab]{3}";//内容由a或b组成,长度为3 System.out.println("aaa".matches(reg4)); // X{n,} :X,至少 n 次 //0次到多次 String reg5 = "[abc]{0,}";//内容由a组成,0次到多次! System.out.println("aaaa".matches(reg5)); //1次到多次 String reg6 = "[a]{1,}"; System.out.println("".matches(reg6)); // X{n,m} :X,至少 n 次,但是不超过 m 次 String reg7 = "[abc]{2,3}"; System.out.println("abc".matches(reg7));
05_正则表达式的分割功能
-
需求
- “a,b,c,d”、 “a,b,c,d”、 “a,b,c,d”、 “a,b,c,d,e” 将以上四个字符串按照逗号进行分割。
-
代码实现
// "a,b,c,d" String str1 = "a,b,c,d"; String reg1 = "[,]{1}"; String[] strs1 = str1.split(reg1); for (String str : strs1) { System.out.println(str); } System.out.println("-----------"); // "a,,b,,c,,d" String str2 = "a,,b,,c,,d"; // String reg2 = ",,"; String reg2 = "[,]{2}"; String[] strs2 = str2.split(reg2); for (String str : strs2) { System.out.println(str); } System.out.println("-----------"); // "a,b,,c,,,d" String str3 = "a,b,,c,,,d"; String reg3 = "[,]{1,3}"; String[] strs3 = str3.split(reg3); for (String str : strs3) { System.out.println(str); } System.out.println("-----------"); // "a,,,,,,,,,b,,,,,,,,,c,,,,,d,,,,,,,,e" String str4 = "a,,,,,,,,,b,,,,,,,,,c,d,,,,,,,,e"; String reg4 = "[,]+"; String[] strs4 = str4.split(reg4); for (String str : strs4) { System.out.println(str); }
06_Pattern类和Matcher类
-
Pattern类
- 相当于就是正则表达式,现在是正则对象
-
Matcher类
- 匹配对象,完成匹配功能等
-
经典调用
//正则表达式 String reg = "[a]{3}"; //正则表达式 转换为 正则对象 Pattern pattern = Pattern.compile(reg); //匹配字符串,匹配对象 Matcher matcher = pattern.matcher("aaa"); //开始匹配 boolean flag = matcher.matches(); System.out.println(flag);
07_正则表达式的获取功能
-
需求
- 把一个字符串中的手机号码获取出来
-
方法介绍
- Matcher类
- find方法:在字符串中找到和正则匹配得上的子字符串,如果找到了返回true,否则返回false
- group方法:获取字符串中找到和正则匹配得上的子字符串
- Matcher类
-
代码实现
String str = "18627775385...fadsfds18627775383..dsfjdsa18627775384"; String reg = "[1]{1}[356789]{1}\\d{9}"; //获取正则对象 Pattern pattern = Pattern.compile(reg); //获取匹配对象 Matcher matcher = pattern.matcher(str); //开始查找手机号 //find:在str中找子字符串,子字符串要和正则匹配 List<String> phones = new ArrayList<>(); while (matcher.find()) { //找到了手机号,获取手机号 String phone = matcher.group(); phones.add(phone); } for (String phone : phones) { System.out.println(phone); }