正则表达式

作用:做数据校验的,就是把填写的字符串判断是否满足正则表达式的要求,如果满足要求返回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]
    }
}
相关推荐
nanxun8861 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103511 天前
Day01 | Java 基础(Java SE)
java
行者全栈架构师1 天前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
云技纵横2 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二2 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
一个做软件开发的牛马2 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端