Java常用API_正则表达式_检验字符串是否满足规则——基础使用方法及综合练习

        正则表达式可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性。

简单举例:

        校验一个qq号是否符合要求

        要求:6位到20位之内,不能以0开头,必须全是数字

代码演示:
public class Test1 {public static void main(String[] args) {//符合要求的字符串String qq1 = "1112222333";//不符合要求的字符串//开头为0String qq2 = "0112222333";//不是全数字String qq3 = "1112222a33";//位数非6~20位String qq4 = "12345";//输出结果System.out.println(qq1.matches("[1~9]\\d{5,19}"));System.out.println(qq2.matches("[1~9]\\d{5,19}"));System.out.println(qq3.matches("[1~9]\\d{5,19}"));System.out.println(qq4.matches("[1~9]\\d{5,19}"));}
}
运行结果:

我来提取出来使用了正则表达式的语句并解释一下:

接下来我将介绍正则表达式的字符类和与定义字符都有哪些和其表示什么意思:

字符类:

[abc]:        只能是a,b或c
[^abc]:       除了a,b,c之外的任何字符
[a-zA-Z]:     a到z或A到Z
[a-d[m-p]]:   a到d,或m到p
[a-z&&[def]]: a到z和def的交集(即d,e,f)
[a-z&&[^bc]]: a到z和非bc的交集(等同于[ad-z])
[a-z&&[^m-p]]:a到z和除了m到p的交集(等同于[a-lq-z])
代码演示:
public class Test2 {public static void main(String[] args) {//只能是a,b或cSystem.out.println("----------1----------");System.out.println("a".matches("[abc]"));//trueSystem.out.println("z".matches("[abc]"));//falseSystem.out.println("7".matches("[abc]"));//false//除了a,b,c之外的任何字符System.out.println("----------2----------");System.out.println("a".matches("[^abc]"));//fSystem.out.println("z".matches("[^abc]"));//tSystem.out.println("7".matches("[^abc]"));//t//a到z或A到ZSystem.out.println("----------3----------");System.out.println("a".matches("[a-zA-Z]"));//tSystem.out.println("A".matches("[a-zA-Z]"));//tSystem.out.println("7".matches("[a-zA-Z]"));//f//a到d,或m到pSystem.out.println("----------4----------");System.out.println("a".matches("[a-d[m-p]]"));//tSystem.out.println("m".matches("[a-d[m-p]]"));//tSystem.out.println("f".matches("[a-d[m-p]]"));//f//a到z和def的交集(即d,e,f)System.out.println("----------5----------");System.out.println("a".matches("[a-z&&[def]]"));//fSystem.out.println("d".matches("[a-z&&[def]]"));//tSystem.out.println("7".matches("[a-z&&[def]]"));//f//a到z和非bc的交集(等同于[ad-z])System.out.println("----------6----------");System.out.println("a".matches("[a-z&&[^bc]]"));//tSystem.out.println("b".matches("[a-z&&[^bc]]"));//fSystem.out.println("7".matches("[a-z&&[^bc]]"));//f//a到z和除了m到p的交集(等同于[a-lq-z])System.out.println("----------7----------");System.out.println("a".matches("[a-z&&[^m-p]]"));//tSystem.out.println("m".matches("[a-z&&[^m-p]]"));//fSystem.out.println("0".matches("[a-z&&[^m-p]]"));//f}
}
运行结果:

注意:

        正则表达式的字符类一个中括号只能判断字符串中的一个字符,若对长度为2以上的字符串使用正则表达式的字符类判断,那么需要对应长度数量的中括号,第一个字符会根据第一个中括号中的条件判断,后面的字符则会根据后面的中括号判断。

代码演示:
public class Test3 {public static void main(String[] args) {System.out.println("ab".matches("[abc][abc]"));//trueSystem.out.println("ab".matches("[abc]"));//false}
}
运行结果:

预定义字符:

        预定义字符和字符类的作用差不多,单独使用只匹配一个字符,并且两者可以通过不同形式表达相同限制范围。

代码演示:
public class Test4 {public static void main(String[] args) {//预定义字符  单个字符//  .    任何字符System.out.println("------1------");System.out.println("a".matches("."));//trueSystem.out.println("a你".matches("."));//falseSystem.out.println("a你".matches(".."));//true//  \d  一个数字:[0-9]System.out.println("------2------");System.out.println("a".matches("\\d"));//fSystem.out.println("1".matches("\\d"));//tSystem.out.println("11".matches("\\d"));//f//  \D  非数字:[^0-9]System.out.println("------3------");System.out.println("a".matches("\\D"));//tSystem.out.println("1".matches("\\D"));//fSystem.out.println("aa".matches("\\D"));//f//  \s  一个空白字符:[\t\n\x0B\f\r]System.out.println("------4------");System.out.println("\t".matches("\\s"));//tSystem.out.println("a".matches("\\s"));//fSystem.out.println("\t\t".matches("\\s"));//f//  \S  非空白字符:[^\s]  与上一个空白字符为补集System.out.println("------5------");System.out.println("\t".matches("\\S"));//fSystem.out.println("a".matches("\\S"));//tSystem.out.println("aa".matches("\\S"));//f//  \w  [a-zA-Z_0-9]英文、数字、下划线System.out.println("------6------");System.out.println("a".matches("\\w"));//tSystem.out.println("A".matches("\\w"));//tSystem.out.println("1".matches("\\w"));//tSystem.out.println("只".matches("\\w"));//fSystem.out.println("因".matches("\\w"));//fSystem.out.println("aa".matches("\\w"));//f//  \W(大写W)  [^\w] 一个非单词字符  与上一个单词字符为补集System.out.println("------7------");System.out.println("a".matches("\\W"));//fSystem.out.println("A".matches("\\W"));//fSystem.out.println("1".matches("\\W"));//fSystem.out.println("只".matches("\\W"));//tSystem.out.println("因".matches("\\W"));//tSystem.out.println("aa".matches("\\W"));//f}
}
运行结果:

数量词(与字符类或预定义字符搭配使用):

        通过字符类或预定义字符与数量词搭配使用,可以达到一个字符类或预定义字符判断多个字符。

        常用数量词有:

X为字符类或预定义字符
X?     一次或零次
X*     零次或多次
X+     一次或多次
X{n}   正好n次
X{n,}  至少n次
X{n,m} 至少n但不超过m次        
代码演示:

这里我都使用的预定义字符 . 表示任意字符都可以

public class Test5 {public static void main(String[] args) {//使用数量词  可以判断多个字符//X为字符类或预定义字符//X?     一次或零次System.out.println("------1------");System.out.println("".matches(".?"));//tSystem.out.println("a".matches(".?"));//tSystem.out.println("aa".matches(".?"));//f//X*     零次或多次System.out.println("------2------");System.out.println("".matches(".*"));//tSystem.out.println("a".matches(".*"));//tSystem.out.println("aa".matches(".*"));//t//X+     一次或多次System.out.println("------3------");System.out.println("".matches(".+"));//fSystem.out.println("a".matches(".+"));//tSystem.out.println("aa".matches(".+"));//t//X{n}   正好n次System.out.println("------4------");System.out.println("".matches(".{2}"));//fSystem.out.println("a".matches(".{2}"));//fSystem.out.println("aa".matches(".{2}"));//t//X{n,}  至少n次System.out.println("------5------");System.out.println("".matches(".{2,}"));//fSystem.out.println("a".matches(".{2,}"));//fSystem.out.println("aa".matches(".{2,}"));//tSystem.out.println("aaa".matches(".{2,}"));//t//X{n,m} 至少n但不超过m次System.out.println("------6------");System.out.println("".matches(".{1,3}"));//fSystem.out.println("a".matches(".{1,3}"));//tSystem.out.println("aa".matches(".{1,3}"));//tSystem.out.println("aaa".matches(".{1,3}"));//tSystem.out.println("aaaa".matches(".{1,3}"));//f//混合使用System.out.println("----混合举例----");//要求十个单词字符System.out.println("234abcABC_".matches("\\w{10}"));//t//要求数字或字母但不能是abc,且位数为5-10位System.out.println("123abcABC".matches("[0-9a-zA-Z&&[^abc]]{5,10}"));//fSystem.out.println("123abcABC123123".matches("[0-9a-zA-Z&&[^abc]]{5,10}"));//fSystem.out.println("123defABC".matches("[0-9a-zA-Z&&[^abc]]{5,10}"));//t}
}
运行结果:

基本练习1:

题目:使用正则表达式验证用户输入的手机号码、座机号码、邮箱号是否满足要求。

        手机号码要求:第一位为1,第二位为3到9的数字,每一位都为数字,总位数要为11位

                举例:13011112222

        座机号码要求:第一部分:区号 要求:以0开头,每一位都为数字,3位或4位

                                 第二部分: -  要求:可以出现也可以不出现,即0次或1次

                                 第三部分:号码 要求:不能以0开头,由5到10位数字组成

                举例:0234-123456        02222222

        邮箱号要求:   第一部分:@左边 要求:字母数字或下划线都可,无位数限制,但至少有一位

                                 第二部分:@ 要求:必须出现,且只能出现一次

                                 第三部分:@右边 要求:

                                                也分为三部分:1.分隔符号点: . 的左边:字母或者数字,2到6位

                                                                          2. 分隔符号点: . : 必须有且只有一个 .

                                                                          3.分隔符号点: . 的右边 :字母2到3位

                                                                          4.2和3可出现1到2次,即可以后缀.com.cn

                举例:abc123@111.com        123@test.com.cn

编写代码:
public class Test6 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//手机号码验证System.out.println("请输入手机号码:");while (true) {String phone = sc.next();if(phone.matches("1[3-9]\\d{9}")) {System.out.println("输入的手机号满足要求");break;} else {System.out.println("输入的手机号不满足要求,请重新输入:");}}//座机号码验证System.out.println("请输入座机号码:");while (true) {String landline = sc.next();if(landline.matches("0\\d{2,3}\\-?[1-9]{4,9}")) {System.out.println("输入的座机号码满足要求");break;} else {System.out.println("输入的座机号码不满足要求,请重新输入:");}}//邮箱号验证System.out.println("请输入邮箱号:");while (true) {String email = sc.next();if(email.matches("\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}")) {System.out.println("输入的邮箱号满足要求");break;} else {System.out.println("输入的邮箱号不满足要求,请重新输入:");}}}
}
运行结果:

基本练习2:

题目:校验身份证号码

举例:11122220000101361x

分析要求:前面6位:第一位不为0,其余五位都为数字

                  再四位为年份:年份前两位为18、19、20,后两位任意两位数字

                  两位月份:01 ~ 12

                  两位日期:01 ~31

                  最后四位:前三位可以为任意数字,最后一位可以为数字可以为大写X或小写x

编写代码:
public class Test7 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入身份证号码:");while (true) {String personId = sc.next();if (personId.matches("[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|10|11|12)((0[1-9])|([12]\\d)|(3[01]))\\d{3}[\\dXx]")) {System.out.println("输入的身份证号码满足要求");break;} else {System.out.println("输入的身份证号码不满足要求,请重新输入:");}}}
}
运行结果:

总结:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/599152.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

报修小程序怎么建立?维修服务行业的智能化升级

在这个数字化飞速发展的时代,维修服务行业也在经历着前所未有的变革。消费者对于服务的期待不再局限于传统的电话预约或线下等待,而是希望能够通过更加智能、便捷的途径解决日常生活中的维修问题。在这样的背景下,报修小程序应运而生&#xf…

Redis客户端

2.Redis客户端 安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括: 命令行客户端图形化桌面客户端编程客户端 2.1.Redis命令行客户端 Redis安装完成后就自带了命令行客户端:redis-…

神经网络中的超参数调整

背景 在深度神经网络学习和优化中,超参数调整一项必备技能,通过观察在训练过程中的监测指标如损失loss和准确率来判断当前模型处于什么样的训练状态,及时调整超参数以更科学地训练模型能够提高资源利用率。在本研究中使用了以下超参数&#x…

Dapr(三) Dapr核心组件的使用一

结合前两期 Dapr(一) 基于云原生了解Dapr(Dapr(一) 基于云原生了解Dapr-CSDN博客) Dapr(二) 分布式应用运行时搭建及服务调用(Dapr(二) 分布式应用运行时搭建及服务调用-CSDN博客) 下篇推出dapr服务注册与发现,dapr组件绑定,dapr Actor功能。 目录 1.…

chrome google浏览器添加插件扩展失败怎么办,无法从该网站添加应用、扩展程序和用户脚本确定,

无法从该网站添加应用、扩展程序和用户脚本确定 chrome google浏览器添加插件扩展失败怎么办,无法从该网站添加应用、扩展程序和用户脚本确定, 需要打开调试模式 chrome://extensions/

安装selenium和关于chrome高版本对应的driver驱动下载安装【Win/Mac 】

目录 一、查看自己电脑上chrome的版本 二、下载 ChromeDriver 三、安装selenium 法一:打开pycharm,点击File,Setting进入配置页面,点击Project下面的Python Interpreter进入环境配置页面,点击。输入selenium。之后…

产品推荐 | 星嵌基于TI TMS320C6657+Xilinx XC7Z035/045 DSP+FPGA+ARM工业核心板

1、产品概述 广州星嵌电子科技有限公司研发的C6657ZYNQ7035/45工业核心板,是基于TI KeyStone 架构C6000 系列TMS320C6657 双核C66x定点/浮点DSP 以及 Xilinx ZYNQ-7000 系列XC7Z035/045 SoC 处理器设计的。 DSP处理器采用TMS320C6657,双核C66x定点/浮点…

HarmonyOS实战开发-如何实现分布式帐号相关的功能。

介绍 本示例主要展示了分布式帐号相关的功能,使用ohos.account.distributedAccount、ohos.account.osAccount等接口,实现了绑定分布式帐号、解绑分布式帐号、更新分布式帐号信息和管理分布式帐号的功能; 效果预览 使用说明 1.首次进入应用会…

idea 开发serlvet汽车租赁管理系统idea开发sqlserver数据库web结构计算机java编程layUI框架开发

一、源码特点 idea开发 java servlet 汽车租赁管理系统是一套完善的web设计系统sqlserver数据库 系统采用serlvetdaobean mvc 模式开发,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 java se…

Mac安装Docker提示Another application changed your Desktop configuration解决方案

1. 问题描述 Mac安装Docker后,提示Another application changed your Desktop configuration,Re-apply configurations无效 2. 解决方案 在终端执行下述命令即可解决: sudo ln -sf /Applications/Docker.app/Contents/Resources/bin/docke…

网络驱动器设备:ISCSI服务器

文章目录 使用ISCSI服务部署网络存储ISCSI技术介绍创建RAID磁盘整列配置ISCSI服务端配置Windows端配置Linux客户端iSCSI服务器CHAP单向认证配置Linux端具体步骤Windows端具体步骤 使用ISCSI服务部署网络存储 主机名IPISCSI服务端192.168.200.10ISCSI客户端192.168.200.20Windo…

Vue 有哪些主要的指令修饰符

目录 1. 什么是指令修饰符 2. 指令修饰符有哪些 2.1. 按键修饰符 2.2. v-model修饰符 2.3. 事件修饰符 1. 什么是指令修饰符 通过 "." 指明一些指令 后缀,不同 后缀 封装了不同的处理操作 目的:简化代码 2. 指令修饰符有哪些 2.1. 按键…