正则表示:
正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。
正则表达式初体验:
需求:假如现在要求校验一个qq号码是否正确,6位及20位之内,必须全部是数字。
先使用目前所学知识完成校验需求;然后体验一下正则表达式校验。
package snow.d6_regex;public class RegexDemo {public static void main(String[] args) {// 需求,校验qq号码,必须全部数字6-20位System.out.println(checkQQ("251425998"));System.out.println(checkQQ1("251425998"));}public static boolean checkQQ1(String qq){return qq!=null && qq.matches("\\d{6,20}");}public static boolean checkQQ(String qq){// 判断qq号码的长度是否满足要求if(qq == null || qq.length()<6 || qq.length()>20){return false;}//判断qq中是否全部是数字,不是返回falsefor (int i = 0; i < qq.length(); i++) {// 获取每位字符char ch = qq.charAt(i);// 判断这个字符是否不是数字,不是数字直接返回falseif(ch < '0'||ch > '9'){return false;}}return true;}
}
字符类(默认匹配一个字符)

预定义的字符类(默认匹配一个字符)

贪婪的量词(配合匹配多个字符)

字符串提供了匹配正则表达式规则的API

package snow.d6_regex;public class RegexDemo1 {public static void main(String[] args) {// 只包含a或b或c一个字符System.out.println("a".matches("[abc]")); // true// 不能包含a或b或c字符System.out.println("d".matches("[^abc]")); // true// 任何一个字符System.out.println("aa".matches(".")); // false// 一个空白字符System.out.println("a b".matches(".\\s."));// true// 一个数字或英文或下划线System.out.println("1a_".matches("\\w\\w\\w")); // true// 一个数字System.out.println("1".matches("\\d")); // true// 校验密码 必须包含数字和字母和下划线至少6位System.out.println("83__sd".matches("\\w{6,}")); //true// 验证码 必须是数字和字母 必须是4位System.out.println("a2s2".matches("[a-zA-Z0-9]{4}")); //trueSystem.out.println("acd2".matches("[\\w&&[^_]]{4}")); //true}
}
案例一:请使用正则表达式完成需求
需求:
1.请编写程序模拟用户输入手机号码、验证格式正确,并给出提示,直到格式输入正确为止。
2.请编写程序模拟用户输入邮箱号码、验证格式正确,并给出提示,直到格式输入正确为止。
3.请编写程序模拟用户输入电话号码、验证格式正确,并给出提示,直到格式输入正确为止。
分析:
定义方法,接受用户输入的数据,使用正则表达式完成检验,并给出提示。
package snow.d6_regex;
import java.util.Scanner;public class RegexDemojy {public static void main(String[] args){Scanner sc = new Scanner(System.in);// 校验手机号码、邮箱、电话号码、金额checkPhone(sc);checkEmail(sc);checkTel(sc);checkmoney(sc);}// 手机号码校验public static void checkPhone(Scanner sc){System.out.println("请您输入您的手机号码:");String phone = sc.next();// 判断手机号码的格式是否正确if(phone.matches("1[3-9]\\d{9}")){System.out.println("手机号码格式正确!");}else {System.out.println("手机号码有误!");checkPhone(sc);}}// 邮箱校验public static void checkEmail(Scanner sc){System.out.println("请您输入您的邮箱:");String email = sc.next();// 判断手机号码的格式是否正确 格式:123455@qq.com 123455@163.com 123455@pci.com.cnif(email.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2}")){System.out.println("邮箱格式正确!");}else {System.out.println("邮箱有误!");checkEmail(sc);}}// 电话号码校验public static void checkTel(Scanner sc){System.out.println("请您输入您的电话号码:");String tel = sc.next();// 判断手机号码的格式是否正确if(tel.matches("0\\d{2,6}-?\\d{8,20}")){System.out.println("电话号码格式正确!");}else {System.out.println("电话号码有误!");checkTel(sc);}}// 校验金额public static void checkmoney(Scanner sc){System.out.println("请您输入您的金额:");String money = sc.next();// 判断手机号码的格式是否正确if(money.matches("\\d{1,}(\\.\\d{1,2})?")){System.out.println("金额格式正确!");}else {System.out.println("金额格式有误!");checkmoney(sc);}}
}

package snow.d6_regex;public class RegexDemo2 {public static void main(String[] args) {String names = "瑞瑞djdjjd云云dfsdakdsdhw勇勇";String[] arrs = names.split("\\w+");for (int i = 0; i < arrs.length; i++) {System.out.println(arrs[i]); //瑞瑞 \n云云 \n勇勇}String name = names.replaceAll("\\w+", " ");System.out.println(name); //瑞瑞 云云 勇勇}
}
package snow.d6_regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test {public static void main(String[] args) {String rs = "程序学习Java,电话020-43422433,或者联系邮箱" +"snow@dream.cn,电话13345678901,02043422433" +"邮箱dream@snow.cn,400-100-4534,4001004534";// 从上面内容中获取电话号码和邮箱// 定义规则String regex = "(\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})" +"|(1[3-9]\\d{9})|(0\\d{2,6}-?\\d{8,20})|(400-?\\d{3,9}-?\\d{3,9})";// 编译规则为匹配对象Pattern pattern = Pattern.compile(regex);// 得到一个内容匹配器对象Matcher matcher = pattern.matcher(rs);// 开始寻找while (matcher.find()){String rs1 = matcher.group();System.out.println(rs1);}}
}