正则表达式

作用:做数据校验的,就是把填写的字符串判断是否满足正则表达式的要求,如果满足要求返回true,不满足要求返回false;【比如转账输入框只能传入数值等等】

	简单理解正则表达式就是一个**字符串**,只是该字符串它是有一定格式的,
	它主要去校验我们输入的字符串是否满足正则表达式的规则,如果满足规则
	返回true,不满足规则返回false

备注:真实开发中常会直接使用别人已经写好了的正则表达式,它也是一种单独的语言;

部分常见正则表达式

字符类:

[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]] d、e 或 f(交集)

[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)

预定义字符类:【两边都可以用,使用前者都必须要转义一般它都跟在Greedy 数量词前面

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\D 非数字: [^0-9]

\s 空白字符:[ \t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]

\W 非单词字符:[^\w]

边界匹配器:

^ 行的开头

$ 行的结尾

\b 单词边界

\B 非单词边界

\A 输入的开头

\G 上一个匹配的结尾

\Z 输入的结尾,仅用于最后的结束符(如果有的话)

\z 输入的结尾

Greedy 数量

X? X,一次或一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超过 m 次

验证正则表达式的方法

boolean matches(String regex)

	告知此字符串是否匹配给定的正则表达式【jdk1.6 String类中有正则表达式归总】
	通俗一讲就是用来校验输入或指定的字符串是否满足设定的正则表达式的规则 
java 复制代码
例:【校验正则表达式------字符类	[abc] a、b 或 c(简单类)】
public class RegularDemo {
    public static void main(String[] args) {
        //[abc] a、b 或 c(简单类)

        //正则表达式【 [abc] a、b 或 c(简单类)】
        String regular = "abc";
        //模拟输入框输入
        String inputString = "abc";
        boolean matches = inputString.matches(regular);
        System.out.println(matches);//true  说明满足正则表达式规则

        //上面与 ^开始 $结尾 效果一样,这更能提现正则表达式
        String regular1 = "^abc$";
        boolean matches1 = inputString.matches(regular1);
        System.out.println(matches1);//true

        //匹配错误
        String regular2 = "^abG$";
        boolean matches2 = inputString.matches(regular2);
        System.out.println(matches2);//false 因为不满足正则表达式的规则

    }
}

//这例之后,上面的部分常见正则表达式,即可这样参模

案例

例一

java 复制代码
模拟输入正确的邮政编码【邮箱是6位数字】
//\d 数字:[0-9] 【两种方式都能表示数字】
//X{n} X,恰好 n 次 
public class RegularDemo {
    public static void main(String[] args) {
        //正则表达式【 [0-9] :只表示一个0-9范围的数字】
        String regular = "^[0-9]$";
        //模拟输入框输入6位的邮政编码
        String inputString = "747868";
        //验证【错误】
        boolean matches = inputString.matches(regular);
        System.out.println(matches);//false 因为[0-9]只占1个数字,所以匹配不成功

        //验证【正确,方式一】
        String regular1 = "^[0-9][0-9][0-9][0-9][0-9][0-9]$";//表示6个且每位0-9的数字
        boolean matches1 = inputString.matches(regular1);
        System.out.println(matches1);//true

        //验证【错误,方式二】
        String regular2 = "^\\d$";//使用\d时需要转义前加\,即\\d表示1位0-9的数字,想几位即"\\d\\d\\d......"几个
        boolean matches2 = inputString.matches(regular2);
        System.out.println(matches2);//false 【匹配错误,因为\\d只表示一位数字】
        //验证【正确,方式二】
        String regular3 = "^\\d\\d\\d\\d\\d\\d$";//表示6个且每位0-9的数字
        boolean matches3 = inputString.matches(regular3);
        System.out.println(matches3);//true

        //验证【正确,方式三】
        String regular4 = "^\\d{6}$";//就是指定有6位0-9的数字
        boolean matches4 = inputString.matches(regular4);
        System.out.println(matches4);//true
    }
}

例二

java 复制代码
模拟输入正确的手机号码(11位 如:1[5-9]{9} 理解1开头,5-9中的其中1个数字,任意9个数字)
public class RegularDemo {
    public static void main(String[] args) {
        //正则表达式
        String regular = "^1[5-9]\\d{9}$";//指定1开头,5-9中的一位,\\d{9}是9个0-9的任意数字
        //模拟输入框输入
        String inputString = "18557678689";//有11位,并符合正则表达式
        //验证
        boolean matches = inputString.matches(regular);
        System.out.println(matches);//true
    }
}

例三

java 复制代码
模拟输入正确的用户名,最少2位,最大7位
//  \w 单词字符:[a-zA-Z_0-9] 表示任意字母和数字及下划线_ ,\w需要转义成\\w
//	X{n,m} X,至少 n 次,但是不超过 m 次 
public class RegularDemo {
    public static void main(String[] args) {
        //正则表达式
        String regular = "^\\w{2,7}";//至少[2,7]个任意[a-zA-Z_0-9]的数字或字母及下划线_;2,3,4,5,6,7
        //模拟输入框输入
        String inputString = "ww_88";//满足[2,7]个数字或字母及下划线_
        //验证
        boolean matches = inputString.matches(regular);
        System.out.println(matches);//true
    }
}

例四

java 复制代码
模拟输入正确的身份证号码,17位数字+1位(数字或者X)
public class RegularDemo {
    public static void main(String[] args) {
        //正则表达式
        String regular = "^\\d{17}(\\d|X)$";//17个0-9的数字+1个0-9的数字或X字母
        //模拟输入框输入
        String inputString = "50013020099997801X";
        //验证
        boolean matches = inputString.matches(regular);
        System.out.println(matches);//true
    }
}

例五

java 复制代码
模拟输入正确的QQ邮箱,7-10位数字+@qq.com
public class RegularDemo {
    public static void main(String[] args) {
        //正则表达式
        String regular = "^\\d{7,9}@qq.com$";//注意:这里的.是表示任何字符
        //模拟输入框输入【错误】
        String inputString = "5008948@qqxcom";//上面的.表示任意字符,所以这里都匹配
        //验证
        boolean matches = inputString.matches(regular);
        System.out.println(matches);//true




        //正则表达式
        String regular1 = "^\\d{7,9}@qq\\.com$";//注意:这里的.是表示任何字符,需要指定是.就必须要转义
        //模拟输入框输入【正确】
        String inputString1 = "5008948@qq.com";//上面的.表示任意字符,所以这里都匹配
        //验证
        boolean matches1 = inputString1.matches(regular1);
        System.out.println(matches1);//true
    }
}

备注:实际开发中直接百度抽取别人写好的正则表达式,如只能配备中文、除数字等等,直接把核心放到上面regular变量中即可

例六

使用trim().split(regular)

java 复制代码
模拟输入正确值,去除其中所有空格拿到有效值
//	\s 空白字符:[ \t\n\x0B\f\r] 需要转义
public class RegularDemo {
    public static void main(String[] args) {
        //正则表达式
        //String regular = "^\\s+$";//注意:这里如果加上^开始$结束,不能生效
        String regular = "\\s+";//作用去除除了字符串前后以内的空白字符
        //模拟输入框输入
        String inputString = "  50    08948@    qqx    co m  ";
        //验证
        String[] splits = inputString.trim().split(regular);//加上trim去掉前后空格
        System.out.println(Arrays.toString(splits));//[50, 08948@, qqx, co, m]
    }
}
相关推荐
m0_7482509331 分钟前
SQL Server Management Studio的使用
数据库·oracle·性能优化
车载诊断技术33 分钟前
人工智能AI在汽车设计领域的应用探索
数据库·人工智能·网络协议·架构·汽车·是诊断功能配置的核心
没有十八岁37 分钟前
云创智城YunCharge 新能源二轮、四轮充电解决方案(云快充、万马爱充、中电联、OCPP1.6J等多个私有单车、汽车充电协议)之新能源充电行业系统说明书
java·数据库·spring·汽车
小萌新上大分1 小时前
Minio搭建并在SpringBoot中使用完成用户头像的上传
java·spring boot·后端·minio·minio搭建·头像上传·minio入门
B站计算机毕业设计超人2 小时前
计算机毕业设计SpringBoot+Vue.js校园失物招领系统(源码+文档+PPT+讲解)
java·vue.js·spring boot·后端·毕业设计·课程设计·毕设
计算机-秋大田2 小时前
基于SpringBoot的环保网站的设计与实现(源码+SQL脚本+LW+部署讲解等)
java·vue.js·spring boot·后端·课程设计
汤姆yu2 小时前
基于springboot的高校物品捐赠系统
java·spring boot·后端·高校物品捐赠
magic 2452 小时前
深入理解Java网络编程:从基础到高级应用
java·开发语言
岁岁岁平安2 小时前
spring注解开发(Spring整合JUnit+MyBatis)(7)
java·spring·junit·log4j·mybatis
爱搞技术的猫猫2 小时前
微店商品详情API接口实战指南:从零实现商品数据自动化获取
大数据·linux·运维·数据库·自动化