2.22日学习打卡----正则表达式

2.22日学习打卡

目录:

  • 2.22日学习打卡
  • 正则表达式
    • 什么是正则表达式?
    • 正则表达式的作用
    • 正则表达式特点
    • 基础语法表格
    • 元字符
    • Java 中正则表达式的使用
    • 正则表达式语法规则
      • 内容限定
        • 单个字符限定
        • 范围字符限定
        • 取反限定
      • 长度限定
      • 长度限定符号
      • 预定义字符
      • 正则表达式的组合定义
    • 常见的正则表达式

正则表达式

什么是正则表达式?

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为 regexregexpRE),是计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

正则表达式的作用

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。使用特殊语法来表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式

正则表达式特点

  • 灵活性、逻辑性和功能性非常的强;
  • 可以迅速地用极简单的方式达到字符串的复杂控制
  • 对于刚接触的人来说,比较晦涩难懂

基础语法表格

single char(单字符)quantifiers(数量)position(位置)
\d 匹配数字* 0个或者更多^一行的开头
\w 匹配word(数字、字母)+ 1个或更多,至少1个$一行的结尾
\W 匹配非word(数字、字母)? 0个或1个,一个Optional\b 单词"结界"(word bounds)
\s 匹配white space(包括空格、tab等){min,max}出现次数在一个范围内
\S 匹配非white space(包括空格、tab等){n}匹配出现n次的
. 匹配任何,任何的字符

元字符

正则表达式主要依赖于元字符。元字符不代表他们本身的字面意思,他们都有特殊的含义。一些元字符写在方括号中的时候有一些特殊的意思。

元字符描述、
.句号匹配任意单个字符除了换行符。
[ ]字符种类。匹配方括号内的任意字符。
[^ ]否定的字符种类。匹配除了方括号里的任意字符
*匹配>=0个重复的在*号之前的字符。
+匹配>=1个重复的+号前的字符。
?标记?之前的字符为可选.
{n,m}匹配num个大括号之前的字符或字符集 (n <= num <= m).
(xyz)字符集,匹配与 xyz 完全相等的字符串.
I或运算符,匹配符号前或后的字符.
\转义字符,用于匹配一些保留的字符 `[ ] ( ) { } . * + ? ^ $
^从开始行开始匹配.
$从末端开始匹配.
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束

Java 中正则表达式的使用

Java 中正则表达式为 String 类型,被验证的内容同样为 String 类型。通过 String 类中的 matches方法实现内容的匹配校验。如:“被验证容”.matches(“正则表达式”)

正则表达式语法规则

正则表达式语法规则:[内容限定]{长度限定}

内容限定

在定义限定内容规则时,如果没有指定长度限定,那么默认长度为 1

单个字符限定
package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[a]";String content="a";System.out.println(content.matches(regex));}
}
运行结果 true
范围字符限定

[a-z0-9]:表示内容可以是 a-z 之间的任意字母或者 0-9 之间的任意数字,不分先后。

package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[a-z]";//a-z(小写输出结果全是true)String content="a";System.out.println(content.matches(regex));String regex2="[a-zA-Z]";//a-z(无论大小写输出结果全是true)String content1="A";System.out.println(content1.matches(regex2));String regex3="[a-zA-Z0-9]";//a-z(无论大小写输出结果全是true)数字0-9也是trueString content2="9";System.out.println(content2.matches(regex3));}
}
取反限定
package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[^abc]";String content="a";System.out.println(content.matches(regex));}
}
运行结果 :false

长度限定

在正则表达式中通过{ }来限定内容长度。
固定长度:{固定长度值}
范围长度:{最小长度值,最大长度值}
[a-z]{5}:表示内容范围为小写字母 a 到 z 且长度必须为 5

package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[^ab]{2}";String content="c";String content1="cc";String content2="ccc";System.out.println(content.matches(regex));System.out.println(content1.matches(regex));System.out.println(content2.matches(regex));}
}
运行结果
false
true
false

[a-z]{2,8}:表示内容范围为小写字母 a 到 z 且长度在 2 到 8 之间,包含 2 与 8

package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[^ab]{2,4}";String content="c";String content1="cc";String content2="ccc";String content3="ccccc";System.out.println(content.matches(regex));System.out.println(content1.matches(regex));System.out.println(content2.matches(regex));System.out.println(content3.matches(regex));}
}
运行结果
false
true
true
false

[a-z]{2,}:表示内容范围为小写字母 a 到 z 且最小长度为 2,最大长度无限制

package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[^ab]{2,}";String content="c";String content1="cc";String content2="ccc";String content3="ccccc";System.out.println(content.matches(regex));System.out.println(content1.matches(regex));System.out.println(content2.matches(regex));System.out.println(content3.matches(regex));}
}
运行结果
false
true
true
true

[a-z]{0,2}:表示内容范围为小写字母 a 到 z 且最小长度为 0,最大长度为 2

package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[^ab]{0,2}";String content="c";String content1="cc";String content2="";String content3="ccccc";System.out.println(content.matches(regex));System.out.println(content1.matches(regex));System.out.println(content2.matches(regex));System.out.println(content3.matches(regex));}
}
运行结果
true
true
true
false

长度限定符号

长度限定符号是指通过预定义符号来完成长度限定。
?:零次或一次。等同于{0,1}

package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[^ab]?";//长度只能是0或1String content="";String content1="c";String content2="cc";String content3="ccc";System.out.println(content.matches(regex));System.out.println(content1.matches(regex));System.out.println(content2.matches(regex));System.out.println(content3.matches(regex));}
}
运行结果
true
true
false
false

+:一次或多次。等同于{1,}

package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[^ab]+";//长度不能是0String content="";String content1="c";String content2="cc";String content3="ccc";System.out.println(content.matches(regex));System.out.println(content1.matches(regex));System.out.println(content2.matches(regex));System.out.println(content3.matches(regex));}
}
运行结果
false
true
true
true

*:零次或多次。等同于{0,}

package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="[^ab]*";String content="";String content1="c";String content2="cc";String content3="ccc";System.out.println(content.matches(regex));System.out.println(content1.matches(regex));System.out.println(content2.matches(regex));System.out.println(content3.matches(regex));}
}
运行结果
true
true
true
true

预定义字符

在正则表达式中可以通过一些预定义字符来表示内容限定。目的是为了简化内容限定的定义。
常见的预定义字符:
在这里插入图片描述

\d(其他用法与这个类似)

package com.jjy;public class RegexTest {public static void main(String[] args) {String regex="\\d";String content="a";String content1="1";String content2="12";String content3="ccc";System.out.println(content.matches(regex));System.out.println(content1.matches(regex));System.out.println(content2.matches(regex));System.out.println(content3.matches(regex));}
}
运行结果
false
true
false
false

正则表达式的组合定义

在正则表达式中可以通过多个内容限定与长度限定来组合定义

示例:
必须是以字母开头,最少长度为 4,最大长度为 8

"[a-z]{1}\\w{3,7}"

常见的正则表达式

1.检验密码强度

密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。

^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

2.邮箱

([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}

3.检验中文

字符串仅能是中文

^[\\u4e00-\\u9fa5]{0,}$

4.校验身份证号码(18位)

^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$

5.校验日期

“yyyy-mm-dd“ 格式的日期校验,已考虑平闰年。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

6.IP 地址

(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)

7.URL

http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!
在这里插入图片描述

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

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

相关文章

【MySQL】MySQL从0到0.9 - 持续更新ing

MySQL SQL 基础 DDL 语句 show databases; show tables; desc table_name; # 获取表信息 show create table 表名; // 查询指定表的建表语句 数据类型 char(10) 不满10个会用空格填充&#xff0c;性能好一点 varchar(10) 变长字符串&#xff0c;性能差一点 CREATE TABLE tabl…

力扣 187. 重复的DNA序列

1.题目 DNA序列 由一系列核苷酸组成&#xff0c;缩写为 A, C, G 和 T.。 例如&#xff0c;"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分子中出现不止一…

【word技巧】word文档如何设置限制编辑

Word文档中为了提高办公效率以及文档安全&#xff0c;我们可以考虑为word文档设置一个限制编辑起到保护文档的作用。今天介绍word文档设置限制编辑的方法。 打开word文档之后&#xff0c;点击功能栏中的【审阅】功能&#xff0c;选择【限制编辑】功能 这是我们勾选右边弹框中的…

【Spring MVC篇】简单案例分析

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、加法计算器二…

匿名+有名管道

管道 相关概念 4种情况 正常情况&#xff0c;如果管道没有数据&#xff0c;读端陷入等待&#xff0c;直到有数据才能唤醒正常情况&#xff0c;如果管道被写满&#xff0c;写端陷入等待&#xff0c;直到有空间才能唤醒写段关闭&#xff0c;读端一直读取&#xff0c;read返回0…

mac m1调试aarch64 android kernel最终方案

问题 这是之前的&#xff0c;调试android kernel的方案还是太笨重了 完美调试android-goldfish(linux kernel) aarch64的方法 然后&#xff0c;看GeekCon AVSS 2023 Qualifier&#xff0c;通过 sdk-repo-linux_aarch64-emulator-8632828.zip 进行启动 完整编译的aosp kernnl…

51单片机学习(4)-----独立按键进一步控制LED灯

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 目录 一. 独立按键灵活控制LED 程序一&#xff1a;单个独立按键控制多个…

Web性能优化-详细讲解与实用方法-MDN文档学习笔记

Web性能优化 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever MDN中文官网 性能优良的网站能够提高访问者留存和用户满意度&#xff0c;减少客户端和服务器之间传输的数据量可降低各方的成本 不同的业务目标和用户需求需要不同的性能度量&#xff0c;要提高…

STM32CubeMX FOC工程配置(AuroraFOC)

一. 简介 哈喽&#xff0c;大家好&#xff0c;今天给大家带来基于AuroraFOC开发板的STM32CubeMX的工程配置&#xff0c;主要配置的参数如下: 1. 互补PWM输出 2. 定时器注入中断ADC采样 3. SPI配置 4. USB CDC配置 5. RT Thread配置 大家如果对这几部分感兴趣的话&#xff0c…

贪婪算法入门指南

想象一下&#xff0c;你在玩一款捡金币的游戏。在这个游戏里&#xff0c;地图中散布着各种大小不一的金币&#xff0c;而你的目标就是尽可能快地收集到最多的金币。你可能会采取一个直观的策略&#xff1a;每次都去捡最近的、看起来最大的金币。这种在每一步都采取局部最优解的…

新版Java面试专题视频教程——虚拟机篇①

新版Java面试专题视频教程——虚拟机篇① 1 JVM组成1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f;1.2 什么是程序计数器&#xff1f;1.3 你能给我详细的介绍Java堆吗?1.3.1 1.7和1.8 堆的区别1.3.2 元空间(MetaSpace)介绍 1.4 什么是虚拟机栈1.4.1 堆和栈的区…

普中51单片机学习(AD转换)

AD转换 分辨率 ADC的分辨率是指使输出数字量变化一个相邻数码所需输入模拟电压的变化量。常用二进制的位数表示。例如12位ADC的分辨率就是12位&#xff0c;或者说分辨率为满刻度的1/(2^12)。 一个10V满刻度的12位ADC能分辨输入电压变化最小值是10V1/(2^12 )2.4mV。 量化误差 …

【Kafka】消息重复场景及解决

目录 生产者阶段重复根本原因过程记录顺序问题解决方案 生产者和broker阶段消息丢失原因解决 消费者阶段重复根本原因解决 生产者阶段重复 根本原因 生产发送的消息没有收到正确的broke响应&#xff0c;导致生产者重试。 生产者发出一条消息&#xff0c;broke落盘以后因为网…

linux drm mipi dsi lcd 点屏之设备树配置

linux drm mipi dsi lcd 点屏之设备树配置 设备树文档&#xff1a; https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/dsi-controller.yaml https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/binding…

网络安全笔记总结

IAE引擎 1.深度检测技术--DFI和DPI技术 DFI和DPI都是流量解析技术&#xff0c;对业务的应用、行为及具体信息进行识别&#xff0c;主要应用于流量分析及流量检测。 DPI&#xff1a;深度包检测技术 DPI是一种基于应用层的流量检测和控制技术&#xff0c;对流量进行拆包&#x…

我花了5天时间,开发了一个在线学习的小网站

大三寒假赋闲在家&#xff0c;闲来无事&#xff0c;用了5天时间做了一个在线学习的小网站&#xff0c;一鼓作气部署上线&#xff0c;制作的过程比较坎坷。内心经历过奔溃&#xff0c;也经历过狂喜。 按照惯例先放出网址&#xff0c;欢迎大家来访问学习&#xff1a;www.pbjlove…

LabVIEW串口通信的激光器模块智能控制

LabVIEW串口通信的激光器模块智能控制 介绍了通过于LabVIEW的VISA串口通信技术在激光器模块控制中的应用。通过研究VISA串口通信的方法和流程&#xff0c;实现了对激光器模块的有效控制&#xff0c;解决了数据发送格式的匹配问题&#xff0c;为激光器模块的智能控制提供了一种…

【Nginx】微信小程序后端开发、一个域名访问多个服务

【Nginx】微信小程序后端开发、一个域名访问多个服务 1. 微信小程序后端开发 对于后端程序员&#xff0c;其实你们的职责就是干老本行&#xff0c;即写接口和服务&#xff0c;让前端能够访问你的接口就行&#xff0c;必要时需要查看微信小程序开发文档去向微信服务器发请求。…

c#高级——插件开发

案例&#xff1a;WinForm计算器插件开发 1.建立插件库&#xff0c;设置各种自己所需的插件组件 如下图所示&#xff1a;进行了计算器的加减法插件计算组件 Calculator_DLL为总插件父类 Calculator_DLL_ADD 为插件子类的控件对象 Calculator_DLL_Sub Calculator_DLL_Factory 为…

即时设计和Axure对比,哪一个好用?

无论是国外页面设计工具&#xff0c;页面设计工具的发展从来没有停滞过&#xff0c; Axure&#xff0c;无论是国产设计工具即时设计&#xff0c;其功能都在不断更新迭代&#xff0c;为设计带来更高效的设计体验。今天对比两个设计工具&#xff0c;帮你找到最适合自己的&#xf…