Java正则表达式
- 正则表达式概述、初体验
- 正则表达式的匹配规则
- 正则表达式的常见案例
- 正则表达式在方法中的应用
- 正则表达式爬取信息
正则表达式概述、初体验
正则表示:
正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。
正则表达式初体验:
需求:假如现在要求校验一个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中是否全部是数字,不是返回false
for (int i = 0; i < qq.length(); i++) {
// 获取每位字符
char ch = qq.charAt(i);
// 判断这个字符是否不是数字,不是数字直接返回false
if(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}")); //true
System.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.cn
if(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);
}
}
}