正则表达式

作用:做数据校验的,就是把填写的字符串判断是否满足正则表达式的要求,如果满足要求返回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]
    }
}
相关推荐
极限实验室3 分钟前
INFINI Labs 产品更新 | INFINI Console 1.29.6 发布 – 优化监控图表异常毛刺等
数据库·产品
先睡6 分钟前
优化MySQL查询
数据库·sql
一头生产的驴9 分钟前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
YuTaoShao16 分钟前
【LeetCode 热题 100】73. 矩阵置零——(解法二)空间复杂度 O(1)
java·算法·leetcode·矩阵
zzywxc78719 分钟前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
小张是铁粉23 分钟前
oracle的内存架构学习
数据库·学习·oracle·架构
专注API从业者27 分钟前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
藏在歌词里30 分钟前
数据库-元数据表
数据库
小乌龟不会飞2 小时前
Ubuntu 安装 etcd 与 etcd-cpp-apiv3
数据库·etcd
YuTaoShao3 小时前
【LeetCode 热题 100】56. 合并区间——排序+遍历
java·算法·leetcode·职场和发展