JavaSE 面向对象程序设计 正则表达式

2024-06-20 13:28

本文主要是介绍JavaSE 面向对象程序设计 正则表达式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

正则表达式

正则表达式(Regular Expression,简称Regex)是用于匹配文本中模式的字符串表达式。它由普通字符(例如字母、数字)和特殊字符(称为元字符)组成,可以非常灵活地定义搜索模式。

常见的一些正则表达式元字符包括:

  • .:匹配任意单个字符,除了换行符 \n
  • *:匹配前面的字符零次或多次。
  • +:匹配前面的字符一次或多次。
  • ?:匹配前面的字符零次或一次。
  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。
  • \d:匹配任意一个数字字符,等价于 [0-9]
  • \w:匹配任意一个字母、数字或下划线字符,等价于 [a-zA-Z0-9_]
  • \s:匹配任意一个空白字符,包括空格、制表符、换行符等。
  • [...]:字符集,匹配方括号中的任意一个字符。
  • [^...]:否定字符集,匹配除了方括号中字符的任意一个字符。

例如,正则表达式 \d{3}-\d{3}-\d{4} 可以匹配形如 123-456-7890 的电话号码格式,其中 \d{3} 表示匹配三个数字字符,- 是普通字符。

正则表达式在文本处理、搜索替换、输入验证等场景中非常有用,能够提供高效的模式匹配和文本处理功能。

正则表达式可以校验一个字符串是否格式合法

以前我们的核心思想是

把异常数据拿出考虑 过滤

将留下满足的数据通过

从左往右依次书写

[1-9]表示0不能防止开头

\ \d表示都是数字

{5,19}表示后面有5—19位

作用

校验字符串是否满足规则

在一段文本中查找一段内容

字符类

public class Main {public static void main(String[] args) {//正则表达式练习System.out.println("a".matches("[abc]"));//trueSystem.out.println("ab".matches("[abc]"));//falseSystem.out.println("z".matches("[abc]"));//falseSystem.out.println("ab".matches("[abc][abc]"));//true//表示只能出现一次System.out.println("a".matches("[^abc]"));//falseSystem.out.println("f".matches("[^abc]"));//trueSystem.out.println("zz".matches("[^abc]"));//falseSystem.out.println("zz".matches("[^abc][^abc]"));//true//表示是否不出现System.out.println("a".matches("[a-z]"));//trueSystem.out.println("A".matches("[a-zA-Z]"));//trueSystem.out.println("aa".matches("[a-z]"));//falseSystem.out.println("aa".matches("[a-z][a-z]"));//trueSystem.out.println("0".matches("[a-zA-Z]"));//falseSystem.out.println("0".matches("[a-zA-Z0-9]"));//trueSystem.out.println("0".matches("[0-9]"));//true//范围的判断 a-z和A-ZSystem.out.println("a".matches("[a-d[m-p]]"));//trueSystem.out.println("0".matches("[a-d[m-p]]"));//false//范围的判断 a-z或者A-ZSystem.out.println("a".matches("[a-z&&[def]]"));//falseSystem.out.println("a".matches("[a-z&[def]]"));//trueSystem.out.println("&".matches("[a-z&&[def]]"));//falseSystem.out.println("1".matches("[a-z&&[def]]"));//false//范围的判断 求交集a-z和def的 是否全都有//如果写成&就是一个简简单单的且符号System.out.println("a".matches("[a-z&&[^bc]]"));//trueSystem.out.println("a".matches("[a-z&&[^b-c]]"));//true//范围的判断 a-z和非bc的交集}

预定义字符类

\在java中是转义字符

改变后面字符的原本含义

通过路径访问时

\ \前面的\表示将后面的\转化成一个普通的\

  System.out.println("\"");System.out.println("你".matches(".."));//falseSystem.out.println("你A".matches(".."));//true//判断是否为一个字符System.out.println("1".matches("\\d"));//trueSystem.out.println("11".matches("\\d"));//falseSystem.out.println("11".matches("\\d\\d"));//true//判断是否为一个数字System.out.println("z".matches("\\w"));//trueSystem.out.println("z".matches("\\w"));//trueSystem.out.println("2".matches("\\w"));//trueSystem.out.println("21".matches("\\w"));//falseSystem.out.println("你".matches("\\w"));//falseSystem.out.println("_".matches("\\w"));//true// \\w只能是一位单词字符 [a-zA-Z_0-9] 大写的W是取反//小写 大写 下划线 数字System.out.println("你".matches("\\W"));//false

数量词

正则表达式构造在Pattern类里面

打开API帮助文档查看

        System.out.println("23df".matches("[a-zA-Z0-9]{4}"));//trueSystem.out.println("23_f".matches("[a-zA-Z0-9]{4}"));//falseSystem.out.println("23_f".matches("[\\w&&[^_]]{4}"));//falseSystem.out.println("23df".matches("[\\w&&[^_]]{4}"));//true

所有的测试用例

public class Main {public static void main(String[] args) {//正则表达式练习System.out.println("a".matches("[abc]"));//trueSystem.out.println("ab".matches("[abc]"));//falseSystem.out.println("z".matches("[abc]"));//falseSystem.out.println("ab".matches("[abc][abc]"));//true//表示只能出现一次System.out.println("a".matches("[^abc]"));//falseSystem.out.println("f".matches("[^abc]"));//trueSystem.out.println("zz".matches("[^abc]"));//falseSystem.out.println("zz".matches("[^abc][^abc]"));//true//表示是否不出现System.out.println("a".matches("[a-z]"));//trueSystem.out.println("A".matches("[a-zA-Z]"));//trueSystem.out.println("aa".matches("[a-z]"));//falseSystem.out.println("aa".matches("[a-z][a-z]"));//trueSystem.out.println("0".matches("[a-zA-Z]"));//falseSystem.out.println("0".matches("[a-zA-Z0-9]"));//trueSystem.out.println("0".matches("[0-9]"));//true//范围的判断 a-z和A-ZSystem.out.println("a".matches("[a-d[m-p]]"));//trueSystem.out.println("0".matches("[a-d[m-p]]"));//false//范围的判断 a-z或者A-ZSystem.out.println("a".matches("[a-z&&[def]]"));//falseSystem.out.println("a".matches("[a-z&[def]]"));//trueSystem.out.println("&".matches("[a-z&&[def]]"));//falseSystem.out.println("1".matches("[a-z&&[def]]"));//false//范围的判断 求交集a-z和def的 是否全都有//如果写成&就是一个简简单单的且符号System.out.println("a".matches("[a-z&&[^bc]]"));//trueSystem.out.println("a".matches("[a-z&&[^b-c]]"));//true//范围的判断 a-z和非bc的交集System.out.println("\"");System.out.println("你".matches(".."));//falseSystem.out.println("你A".matches(".."));//true//判断是否为一个字符System.out.println("1".matches("\\d"));//trueSystem.out.println("11".matches("\\d"));//falseSystem.out.println("11".matches("\\d\\d"));//true//判断是否为一个数字System.out.println("z".matches("\\w"));//trueSystem.out.println("z".matches("\\w"));//trueSystem.out.println("2".matches("\\w"));//trueSystem.out.println("21".matches("\\w"));//falseSystem.out.println("你".matches("\\w"));//falseSystem.out.println("_".matches("\\w"));//trueSystem.out.println("你".matches("\\W"));//false// \\w只能是一位单词字符 [a-zA-Z_0-9] 大写的W是取反//小写 大写 下划线 数字System.out.println("23df".matches("[a-zA-Z0-9]{4}"));//trueSystem.out.println("23_f".matches("[a-zA-Z0-9]{4}"));//falseSystem.out.println("23_f".matches("[\\w&&[^_]]{4}"));//falseSystem.out.println("23df".matches("[\\w&&[^_]]{4}"));//true}
}

正则表达式练习

正则表达式书写时应该拿正确的数据从左往右依次书写

校验输入的手机号码

校验输入的邮箱号

校验输入的电话号码

是否符合要求


public class Main {public static void main(String[] args) {//心得//拿一个正确的数据。从左往右依次去写//手机号码 13112345678//分成三部分//  1表示手机号码只能是1开头,//  [3-9]表示手号码第二位只能是3-9之间的//  \\d{9}表示任意数字可以出现9次String regex1="1[3-9]\\d{9}";//座机号码 020-2324242//分为三部分//  0\\d{2,3}表示一定以0开头 从第二位开始可以是任意数字出现2-3次//  ?表示次数,出现1次或者0次//  号码的第一位不能以0开头,从第二位开始可以是任意数字,一共5-10位String regex2="0\\d{2,3}-?[1-9]\\d{4,9}";System.out.println("021224422".matches(regex2));//邮箱号码 323232@qq.com zhangsan@qq.com dlei009@pei.com.cn//分成三部分//  @的左边 \\w+ 表示出现任意字母大小写数字 至少出现一次//  @表示必须出现一次//  分成三小段//  [\w^_]表示任意大小写字母数字去掉下划线{2,6}由2-6次//  \\.表示必须出现一个点 .表示出现任意一个字符//  [a-zA-Z]{2,3}表示出现2到3位的任意大小写字母//  括号括起来表示那一部分可以出现一次到两次 看成一组String regex3="\\w+@\\[\\w^_]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";}
}

在实际开发中,我们很少会自己写正则表达式

百度一个类似的,自己改成公司要求

要求能看的懂即可

| 表示或者的意思

0和1加上任意一个整数 或者 2加上0或1或2

0-5加上任意一个数字

0-5加上任意一个数字

身份证校验

^(\d{17}[0-9Xx])$

方括号里表示三种方式只要出现一次就可以了

(?i)表示忽略后方字符串的大小写

身份证校验

前六位是省份 市区 派出所信息

第一位不能是0 [1-9]\ \d{5}

然后是出生日期

年份 {18|19|20} \ \d{2}

月份 01-09 10 11 12 0[1-9]|[0-2]

日期01-31 0[1-9] | [12]\ \d |3[01]

后面四位 先任意出现3次数字 \ \d{3}

最后一位可以是一位数字或xX [\ \dXx]**

最后拼起来一起 用括号

String sfz="/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0[1-9]|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/";

鼠标右键 用插件搜索 然后插入

我们需要对现有的需求进行一些改写

小结


public class Main {public static void main(String[] args) {//心得//拿一个正确的数据。从左往右依次去写//手机号码 13112345678//分成三部分//  1表示手机号码只能是1开头,//  [3-9]表示手号码第二位只能是3-9之间的//  \\d{9}表示任意数字可以出现9次String regex1="1[3-9]\\d{9}";//座机号码 020-2324242//分为三部分//  0\\d{2,3}表示一定以0开头 从第二位开始可以是任意数字出现2-3次//  ?表示次数,出现1次或者0次//  号码的第一位不能以0开头,从第二位开始可以是任意数字,一共5-10位String regex2="0\\d{2,3}-?[1-9]\\d{4,9}";System.out.println("021224422".matches(regex2));//邮箱号码 323232@qq.com zhangsan@qq.com dlei009@pei.com.cn//分成三部分//  @的左边 \\w+ 表示出现任意字母大小写数字 至少出现一次//  @表示必须出现一次//  分成三小段//  [\w^_]表示任意大小写字母数字去掉下划线{2,6}由2-6次//  \\.表示必须出现一个点 .表示出现任意一个字符//  [a-zA-Z]{2,3}表示出现2到3位的任意大小写字母//  括号括起来表示那一部分可以出现一次到两次 看成一组String regex3="\\w+@\\[\\w^_]{2,6}(\\.[a-zA-Z]{2,3}){1,2}"; 2]\\d|30|31)\\d{3}$)|(^\\d{6}(18|19|20)\\d{2}(0[1-9]|10|11|12)([0-2]\\d|30|31)\\d{3}(\\d|X|x)$)/";}}

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

这篇关于JavaSE 面向对象程序设计 正则表达式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078263

相关文章

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

Java面试题:通过实例说明内连接、左外连接和右外连接的区别

在 SQL 中,连接(JOIN)用于在多个表之间组合行。最常用的连接类型是内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)和右外连接(RIGHT OUTER JOIN)。它们的主要区别在于它们如何处理表之间的匹配和不匹配行。下面是每种连接的详细说明和示例。 表示例 假设有两个表:Customers 和 Orders。 Customers CustomerIDCus

22.手绘Spring DI运行时序图

1.依赖注入发生的时间 当Spring loC容器完成了 Bean定义资源的定位、载入和解析注册以后,loC容器中已经管理类Bean 定义的相关数据,但是此时loC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况 发生: 、用户第一次调用getBean()方法时,loC容器触发依赖注入。 、当用户在配置文件中将<bean>元素配置了 lazy-init二false属性,即让