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.mzph.cn/news/798831.shtml

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

相关文章

【代码随想录】哈希表

文章目录 242.有效的字母异位词349. 两个数组的交集202. 快乐数1. 两数之和454. 四数相加 II383. 赎金信15. 三数之和18. 四数之和 242.有效的字母异位词 class Solution {public boolean isAnagram(String s, String t) {if(snull || tnull || s.length()!t.length()){return …

机器学习——模型融合:平均法

机器学习——模型融合:平均法 在机器学习领域,模型融合是一种通过结合多个基本模型的预测结果来提高整体模型性能的技术。模型融合技术通常能够降低预测的方差,提高模型的鲁棒性,并在一定程度上提高预测的准确性。本文将重点介绍…

Django项目定时任务django-crontab

首先定义一个定时任务函数tasks.py(见文章末尾示例),编写函数,然后在setting.py中配置定时任务 1、首先安装django-crontab pip install django-crontab 2、在setting.py中添加应用 (在所有自定义注册app之上) INSTALLED_APPS …

基于SpringBoot的“汽车租赁系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“汽车租赁系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 管理员登录界面图 管理员功能界面…

吴恩达2022机器学习专项课程(一) 第二周课程实验:多元线性回归(Lab_02)

1.训练集 使用Numpy数组存储数据集。 2.打印数组 打印两个数组的形状和数据。 3.初始化w,b 为了演示,w,b预设出接近最优解的值。w是一个一维数组,w个数对应特征个数。 4.非向量化计算多元线性回归函数 使用for循环&…

【pycharm报错】rror: Microsoft Visual C++ 14.0 or greater is required.

一、报错 二、下载vs 路径:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/ 三、安装 四、安装成功并启动 重新安装chromadb成功

springCloud-LoadBalancer负载均衡微服务负载均衡器LoadBalancer

2020年前SpringCloud是采用Ribbon作为负载均衡实现,但是在2020后采用了LoadBalancer替代 LoadBalancer默认提供了两种负载均衡策略(只能通过配置类来修改负载均衡策略) 1.RandomLoadBalancer-随机分配策略 2.RoundRobinLoadBalancer-轮询分配…

Linux IO的奥秘:深入探索数据流动的魔法

Linux I/O(输入/输出)系统是其核心功能之一,负责处理数据在系统内部及与外界之间的流动。为了优化这一流程,Linux进行了一系列努力和抽象化,以提高效率、灵活性和易用性。🚀 1. 统一的设备模型 Linux将所…

鸿蒙ArkTS开始实例:【canvas实现签名板功能】

使用ArkTS中的canvas实现签名板的功能,canvas画布大家都很熟悉,我们会用它经常实现一些画板或者图表、表格之类的功能。canvas签名板是我在开发APP过程中实现的一个功能,开发过程中也是遇到比较多的问题。我会按照以下几点来讲解开发整个过程…

Qt 4.7作业

1、自由发挥应用场景实现一个登录窗口界面。 【可以是QQ登录界面、也可以是自己发挥的登录界面】 要求:尽量每行代码都有注释 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口标题this->setWindowTitle(&q…

模块十一 面向对象

回顾与重点 模块十回顾 继承:子类继承父类,可以直接使用父类中非私有成员,子类不用写重复性代码 关键字:extends 成员访问特点: a. 成员变量:看等号左边是谁 b. 成员方法:看new的是谁 方法的…

pytorch交叉熵

目录 1. Entropy2. 交叉熵3. 二分类4. 为什么分类问题使用交叉熵5. 代码示例 1. Entropy Entropy中文是熵的意思,它代表一种不确定性,不确定性越高惊喜度也就越高。 如上图,假设熵代表中奖概率,当熵为2 的中奖概率为1/4没什么惊…

数字乡村:科技引领新时代农村发展

随着信息技术的迅猛发展和数字化浪潮的推进,数字乡村作为新时代农村发展的重要战略,正日益成为引领农村现代化的强大引擎。数字乡村不仅代表着农村信息化建设的新高度,更是农村经济社会发展的重要支撑。通过数字技术的深入应用,农…

ICP的一点学习笔记

1. ICP算法相关 2.GICP算法笔记,参考http://www.roboticsproceedings.org/rss05/p21.pdfAbstract:在本文中结合ICP和点云面ICP算法到一个概率框架。接下来要使用这个框架进行局部平面结构而不是通常的点面方法。这个可以认为是面到面方法。与标准的ICP和点到面方法相比&#xf…

npm版本切换工具nvm

有了nvm,可以在一台机器上同时安装多个版本的nodejs,然后指定使用某个版本。 前端开发的时候,安装依赖一直是个令我头痛的问题。总是报错,或者不是少了这样就是少了那样,鸡飞狗走。以往,一般要装个enpm&am…

安卓java打包uniapp原生插件 和 uniapp使用安卓android原生插件

1.uniapp dcloud官方文档 简介 | uni小程序SDK 2.前提,需要有经验的安卓java开发人员,并且同时具备uniapp移动端开发经验。说明:android打包的.aar和uniapp需要的.aar是不一样的,uniapp需要的.aar是需要有一些特定配置的&#x…

HarmonyOS实战开发DLP-如何实现一个安全类App。

介绍 本示例是一个安全类App,使用ohos.dlpPermission 接口展示了在eTS中普通文件加密受限的过程。 效果预览 使用说明: 1.启动应用后点击“”按钮可以添加一个普通文件; 2.长按点击加密按钮,出现加密权限弹窗,选择需要设置的权限并点击确定…

《从零开始学架构》读书笔记(一)

目录 软件架构设计产生的历史背景 软件架构设计的目的 系统复杂度来源 追求高性能 一、单机高性能 二、集群的高性能 追求高可用 一、计算高可用 二、存储高可用 追求可扩展性 一、预测变化 二、应对变化 追求安全、低成本、规模 一、安全 二、低成本 三、规模…

蓝桥杯 历届真题 杨辉三角形【第十二届】【省赛】【C组】

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 思路: 由于我第一写没考虑到大数据的原因,直接判断导致只得了40分,下面是我的代码: #…

uniapp中uni.navigateTo传递变量

效果展示: 核心代码: uniapp中uni.navigateTo传递变量 methods: {changePages(item) {setDatas("maintenanceFunName", JSON.stringify(item)).then((res) > {uni.navigateTo({url: /pages/PMS/maintenance/maintenanceTypes/maintenanceT…