正则表达式.java

目录

 

1.1 正则表达式的概念及演示

正则表达式的作用: 

 1.2 正则表达式-字符类

1.3 正则表达式-逻辑运算符

1.4 正则表达式-预定义字符

1.5 正则表达式-数量词 

1.6 正则表达式练习1

 1.7 正则表达式练习2

小结 :

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

​编辑

②在一段文本中查找满足要求的内容🧸

 按要求爬取:

有条件爬取:

贪婪爬取和非贪婪爬取:

③按照正则表达式的内容,对字符串进行替换🧸

④按照正则表达式的内容,对字符串进行切割 🧸

 ⑤捕获分组和非捕获分组


1.1 正则表达式的概念及演示

  • 正则表达式是由一些具有特殊含义的字符组成的字符串,多用于查找、替换、切割符合规则的字符串。在表单验证、Url映射等处都会经常用到。
  • 在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则,我们可以验证用户输入的字符串是否匹配这个规则。
  • 先看一个不使用正则表达式验证的例子:下面的程序让用户输入一个QQ号码,我们要验证:
    • QQ号码必须是5–15位长度
    • 而且必须全部是数字
    • 而且首位不能为0

  假如现在要求校验一个qq号码是否正确。
            规则:6位及20位之内,日不能在开头,必须全部是数字。
            先使用目前所学知识完成校验需求然后体验一下正则表达式检验。

  • 使用正则表达式验证:

我们接下来就重点学习怎样写正则表达式

 1.2 正则表达式-字符类

  • 语法示例:
  1. [abc]:代表a或者b,或者c字符中的一个。
  2. [^abc]:代表除a,b,c以外的任何字符。
  3. [a-z]:代表a-z的所有小写字符中的一个。
  4. [A-Z]:代表A-Z的所有大写字符中的一个。
  5. [0-9]:代表0-9之间的某一个数字字符。
  6. [a-zA-Z0-9]:代表a-z或者A-Z或者0-9之间的任意一个字符。
  7. [a-dm-p]:a 到 d 或 m 到 p之间的任意一个字符。

注:一个[]只能匹配一个字符 

  • 代码示例:

1.3 正则表达式-逻辑运算符

  • 语法示例:
    1. &&:并且,交集
    2. | :或者,并集
    3. \ :转义字符

 

1.4 正则表达式-预定义字符

  1. "." : 匹配任何字符。
  2. "\d":任何数字[0-9]的简写;
  3. "\D":任何非数字[^0-9]的简写;
  4. "\s": 空白字符:[ \t\n\x0B\f\r] 的简写
  5. "\S": 非空白字符:[^\s] 的简写
  6. "\w":单词字符:[a-zA-Z_0-9]的简写
  7. "\W":非单词字符:[^\w]

1.5 正则表达式-数量词 

  • 语法示例:
    1. X? : 0次或1次
    2. X* : 0次到多次
    3. X+ : 1次或多次
    4. X{n} : 恰好n次
    5. X{n,} : 至少n次
    6. X{n,m}: n到m次(n和m都是包含的)

1.6 正则表达式练习1

 需求
            请编写正则表达式验证用户输入的手机号码,邮箱号,电话号码是否满足要求。

 1.7 正则表达式练习2

结果: 

小结 :

正则表达式的作用: 

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

②在一段文本中查找满足要求的内容🧸

③按照正则表达式的内容,对字符串进行替换🧸

④按照正则表达式的内容,对字符串进行切割 🧸

 ⑤捕获分组和非捕获分组

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

🧩[]:只能是括号里的字符

🧩[^]:除了括号里的字符

🧩[- -]:表示两段范围,满足其一即可

🧩[[]]:或者的意思,满足其一即可

🧩.  :表示任何字符

🧩\d:一个数字:[1-9]

🧩\D:非数字:[^0-9]

🧩\s:一个空白字符:[\t\n\x0B\f\r]

🧩\S:非空白字符

🧩\w:英文,数字,下划线

🧩\W:一个非单词字符:[^\w]

  • 验证时间

  • 忽略大小写(?!)

🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳

②在一段文本中查找满足要求的内容🧸

步骤: 

📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝📝

  1. 定义正则表达式:regex
  2. 获取正则表达式的对象:Pattern类
  3. 获取文本匹配器对象:Matcher类,就是Pattern的对象调用matcher方法,把文本传递过去
  4. find() 方法查找文本里面满足规则的子串,并记录索引
  5. group()方法根据find()里记录的索引截取文本
 按要求爬取:

 🥇🥇🥇结果

有条件爬取:

文本:

"Java啦啦" +"哈Java17太阳当空照Java10花儿对我笑Java2小鸟说早早早"

  • (?i)表示忽略Java的大小写
  • ?理解为前面的数据Java
  • =表示后面紧随的数据是是什么
  • 但是在获取的时候,只获取前半部分

 

  • :表示后面紧随的数据是什么
  • 但是在获取的时候,获取全部

  • !表示后面不能紧随的数据是是什么

结果:Java

贪婪爬取和非贪婪爬取:
  • 🪅+和*:贪婪匹配,就是爬取数据的时候,尽可能多的获取数据
  • 🪅+?和*?:非贪婪匹配,就是爬取数据的是时候,尽可能少的获取数据

需求1:

 需求2: 

③按照正则表达式的内容,对字符串进行替换🧸

public String replaceAll(String regex,String newStr);

细节:

方法在底层跟之前一样,也会创建文本解析器的对象

然后从头开始读取字符串中的内容,要是有满足的,就用第二个字符串去替换

④按照正则表达式的内容,对字符串进行切割 🧸

public String[ ] split(String regex); 

 ⑤捕获分组和非捕获分组

 捕获分组:

  • 每个分组用括号()表示
  • 后续还要继续用到本组数据
  • 从左到右,左括号的顺序就是组号
  • 正则内部使用:\\组号
  • 正则外部使用:$组号

 

非捕获分组:

分组之后不需要再用到本组数据,仅仅是把数据括起来。如果使用组号就会报错

符号含义举例
(?:正则)获取所有Java(?:8|11|17)
(?=正则)获取前面部分Java(?=8|11|17)
(?!正则)获取不是指定内容的部分Java(?!8|11|17)

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

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

相关文章

免费通配符证书的申请指南——从申请到启动https

如果您的网站拥有众多二级子域名,那么通配符证书证书是最好的选择。 免费通配符申请流程如下: 1 创建证书服务商账号 首先选择一个提供免费通配符的服务商,打开国产服务商JoySSL官网,创建一个账号(注册账号时填写注册…

Android创建快捷方式到桌面

效果图 参考 https://blog.51cto.com/u_16175498/8811197https://blog.51cto.com/u_16175498/8811197 权限 <uses-permission android:name"com.android.launcher.permission.INSTALL_SHORTCUT" /> 实现 if (Build.VERSION.SDK_INT > Build.VERSION_C…

Apktool 反编译、修改、重打包学习使用及问题处理

反编译 $ apktool d app.apk -r --only-main-classes -o destDir d 表示反编译 app.apk 是目标apk文件路径-r 表示不反编译资源文件 --only-main-classes 表示不反编译某些资源文件目录下的dex文件&#xff0c;这些dex文件通常是被加固的dex.-o 反编译后代码存放目录 修改 …

GPG的使用

这里写自定义目录标题 安装加密程序生成加密密钥怎么备份自己的密钥就可以使用公钥加密邮件信息了 安装加密程序 下载gpg4win&#xff1a; https://www.gpg4win.org/index.html 免费的&#xff0c;如果使用的是苹果电脑&#xff0c;使用https://gpgtools.org/。 如果是linux&a…

中建三局,宁德时代,金证科技,途游游戏,得物,蓝禾,顺丰,康冠科技24春招内推

中建三局&#xff0c;宁德时代&#xff0c;金证科技&#xff0c;途游游戏&#xff0c;得物&#xff0c;蓝禾&#xff0c;顺丰&#xff0c;康冠科技24春招内推 ①得物 【岗位】技术&#xff0c;设计&#xff0c;供应链&#xff0c;风控&#xff0c;产品&#xff0c;运营&#xf…

Python 与 TensorFlow2 生成式 AI(四)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第九章&#xff1a;文本生成方法的崛起 在前几章中&#xff0c;我们讨论了不同的方法和技术来开发和训练生成模型。特别是在第六章“使用 …

vue3 依赖-组件tablepage-vue3 项目公共配置封装

github求⭐ 可通过github 地址和npm 地址查看全部内容 vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例-汇总 vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例&#xff08;Ⅰ&#…

常用网络知识点(网管网工需掌握)

前言 最近在学习网络方面的内容时&#xff0c;看到很多知识点重复出现&#xff0c;不管在任何地方都能利用&#xff0c;我也就加班整理出一份针对于网络管理员/网络工程师等从业网络方面的知识点汇总 有需要的可以点赞搜藏慢慢看&#xff01;后续还会更新常见配置命令 BGP BGP…

【C++】匿名对象超详细详解(什么是匿名对象?对象可以是哪些类型呢?)

目录 一、前言 二、匿名对象的概念详解 &#x1f95d; 语法结构 &#x1f34d;概念理解 三、匿名对象的对象类型 四、匿名对象的使用 &#x1f347;简单场景的使用 &#x1f349;复杂场景的使用 五、总结 六、共勉 一、前言 在C中&#xff0c;匿名对象&#xff08;Ano…

一文解决ArcGIS生成点和管段 含案例讲解

背景 在工作中&#xff0c;我们经常遇到要将坐标数据导入 GIS&#xff0c;生成点位&#xff0c;若是地理坐标系&#xff08;经纬度&#xff09;&#xff0c;那么直接用 arcgis或者QGIS 导入数据就行了&#xff0c;可实际中总会遇到各种问题&#xff1a; 坐标数据集为大地 200…

《大数据最全面试题-Offer直通车》目录

大数据时代已经到来&#xff0c;数据科学家、大数据工程师、数据分析师等岗位成为了热门职业。如果你正准备面试&#xff0c;想要脱颖而出&#xff0c;那么《大数据最全面试题-Offer直通车》是你的不二选择。 本书汇集了多篇超过1万字的精华内容&#xff0c;包括程序员入职新公…

如何使用Go语言进行基准测试(benchmark)?

文章目录 一、基准测试的基本概念二、编写基准测试函数三、运行基准测试四、优化代码性能五、注意事项总结 在Go语言中&#xff0c;基准测试&#xff08;benchmark&#xff09;是一种评估代码性能的有效方式。通过基准测试&#xff0c;我们可以测量代码执行的时间、内存使用情况…

requestbody无法将json字符串转为相应类

报错问题&#xff1a;"requestbody无法将json字符串转为相应类" 通常意味着在使用Spring框架的REST API时&#xff0c;客户端发送的JSON数据无法被正确地解析为服务器端预期的Java对象。 可能的原因和解决方法&#xff1a; JSON格式错误&#xff1a;确保客户端发送的…

【Linux】详解core dump文件的作用以及用法ubuntu20.04下无法形成core dump文件的解决办法

说明 从第三大点开始讲解ubuntu20.04下无法形成core dump文件的解决办法。 一、core与term的区别 在之前讲过的信号中&#xff0c;终止进程的信号的动作分为两种&#xff0c;一种是core&#xff0c;一种是term。term&#xff08;全称termination&#xff09;是直接终止进程&am…

HTML_CSS学习:CSS像素与颜色

一、像素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>像素</title> </head><style>.atguigu1{/*单位可以是cm&#xff0c;但不能是m,dm*/width: 1cm;height: 1cm;background-c…

Java语法day1

Java语法day1 一、选择题二、编程题 一、选择题 1、派生类调用基类的构造器必须用到的关键字&#xff08;C&#xff09; A: this B: final C: super D: static 说明&#xff1a;调用父类的构造器或者父类的方法&#xff0c;要用关键字super 2、以下哪个接口的定义是正确的&am…

C++ string类

目录 0.前言 1.为什么学习string类 1.1 C语言字符串的局限性 1.2 C string类的优势 2.标准库中的string类 2.1 字符串作为字符序列的类 2.2 接口与标准容器类似 2.3 基于模板的设计 2.4 编码和字符处理 3.string类的常用接口说明 3.1构造函数 3.1.1默认构造函数 3…

GPU 架构与 CUDA 关系 并行计算平台和编程模型 CUDA 线程层次结构 GPU 的算力是如何计算的 算力峰值

GPU 架构与 CUDA 关系 本文主要包含 NVIDIA GPU 硬件的基础概念、CUDA(Compute Unified Device Architecture)并行计算平台和编程模型,详细讲解 CUDA 线程层次结构,最后将讲解 GPU 的算力是如何计算的,这将有助于计算大模型的算力峰值和算力利用率。 GPU 硬件基础概念GP…

Unity Timeline学习笔记(5) - 自定义轨道切片上变量Transform对象丢失,使用ExposedReference来解决。

问题 我在笔记(4)中后来又引用了Hierarchy中的Transform对象Transform obj&#xff0c;发现一些问题。 要么无法拖入进去对象&#xff0c;要么拖入进去保存后&#xff0c;再次编辑或者运行的时候发现obj丢失了。 我们还是用修改下笔记&#xff08;4&#xff09;的部分代码来…

linux查看端口占用

以3040端口为例 要查看在Linux系统中哪个程序占用了3040端口&#xff0c;可以使用lsof命令或netstat命令结合适当的参数。这里提供两种常用的方法&#xff1a; 方法1&#xff1a;使用 lsof 命令 lsof&#xff08;List Open Files&#xff09;是一个查看当前系统打开文件的工…