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也是true
        String 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或1
        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
false
false

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

package com.jjy;

public class RegexTest {
    public static void main(String[] args) {
        String regex="[^ab]+";
        //长度不能是0
        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));


    }
}
运行结果
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- ./?%&=]*

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux Kernel】虚拟文件系统初探

学无止境~ 看LKD进行的粗浅整理&#xff0c;目标是能够做到设计上面的理解~ Linux操作系统上支持多种文件系统&#xff0c;如本地文件系统EXT4、XFS、EXT3 等&#xff0c;同时还支持NFS、CIFS以及一些特殊的文件系统&#xff0c;同时在上层调用文件管理时又不感知不同文件系…

高并发Server的基石:reactor反应堆模式

业务开发同学只关心业务处理流程。但是我们开发的程序都是运行服务端server上&#xff0c;服务端server接收到IO请求后&#xff0c;是如何处理请求并最终进入业务流程的呢&#xff1f;这里不得不提到reactor反应堆模型。nginx tomcat redis nodejs dubbo等软件的网络处理模型都…

如何食用Kaggle的Course中的exercise?

前言 读完本文只需要几分钟&#xff0c;读完后你将知道&#xff1a; 如何连接kaggle的反馈系统如何检查代码正确性如何查看提示和答案 读者可以拿kaggle的 pandas入门课来练手。 关于Setup 通常最上面的会有一块代码&#xff0c;它的功能是连接kaggle的反馈系统&#xff0…

Python 在Word中创建表格并填入数据、图片

在Word中&#xff0c;表格是一个强大的工具&#xff0c;它可以帮助你更好地组织、呈现和分析信息。本文将介绍如何使用Python在Word中创建表格并填入数据、图片&#xff0c;以及设置表格样式等。 Python Word库&#xff1a; 要使用Python在Word中创建或操作表格&#xff0c;需…

HDFS源码解析---写数据流程

太长不看版 1、写入&#xff08;create&#xff09;创建DFSOutputStream&#xff0c;启动DataStreamer线程run &#xff08;主线程&#xff09; 2、setPipeline -> nextBlockOutputStream -> locateFollowingBlock&#xff08;addBlock&#xff09; 2、createBlockOut…

【前端素材】推荐优质后台管理系统Qovex平台模板(附源码)

一、需求分析 1、定义 后台管理系统是一种用于管理和监控网站、应用程序或系统的在线工具。它通常是通过网页界面进行访问和操作&#xff0c;用于管理网站内容、用户权限、数据分析等。后台管理系统是网站或应用程序的控制中心&#xff0c;管理员可以通过后台系统进行各种管理…

关于字符集(彻底搞清楚一个中文占几个字节?)

目录 一、字符集二、ASCII码(字符编码)三、ISO-8859-1(字符集)四、GBxxx(字符集)五、Unicode码(字符集)六、UTF-8(字符编码)总结 一、字符集 编码与解码 计算机中储存的信息都是用二进制数表示的而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结…

Ubuntu20.04和Windows11下配置StarCraft II环境

1.Ubuntu20.04 根据下面这篇博客就可以顺利安装&#xff1a; 强化学习实战(九) Linux下配置星际争霸Ⅱ环境https://blog.csdn.net/weixin_39059031/article/details/117247635?spm1001.2014.3001.5506 Ubuntu下显示游戏界面目前还没有解决掉。 大家可以根据以下链接看看能…

腾讯云ICP备案服务器多少钱?

腾讯云备案服务器多少钱&#xff1f;备案服务器只要62元一年&#xff0c;可以备案5个网站。备案服务器申请页面 https://curl.qcloud.com/oRMoSucP 链接打开如下图&#xff1a; 腾讯云备案服务器价格 腾讯云支持ICP备案的服务器有以下三点限制条件&#xff1a; 1、地域必须是中…

PMP认证有什么用?含金量高吗?如何备考?

PMP备考多久能参加PMP考试&#xff0c;培训机构是关键点 依我这几年的持证体验来看&#xff0c;PMP认证的用处还是比较多的&#xff0c;也有一定的含金量&#xff0c;这两个方面基本都是随便一百度就能得到结果的&#xff0c;在考PMP的人群中唯一不同的可能就是备考方面的问题…

设计一个 shell 命令行程序

目录 实现 shell 主要思路 代码&#xff08;Linux&#xff09;系统 实现 shell 主要思路 1、要知道一个 shell 进程在运行起来都会在命令行呈现什么&#xff0c;如图是Xshell 登录成功后的界面&#xff1a;所以第一步要做的就是打印命令行提示符。 Xshell 命令行提示符的组…

SQL-Labs46关order by注入姿势

君衍. 四十六关 ORDER BY数字型注入1、源码分析2、rand()盲注3、if语句盲注4、时间盲注5、报错注入6、Limit注入7、盲注脚本 四十六关 ORDER BY数字型注入 请求方式注入类型拼接方式GET报错、布尔盲注、延时盲注ORDER BY $id 我们直接可以从界面中得知传参的参数为SORT&#x…

力扣 169. 多数元素

思路&#xff1a; 因为题目说一定存在多数元素&#xff0c;就说明一定有一个数的个数多于n/2 将数组采用冒泡从小到大排序&#xff0c;最中间的那个元素一定是多数元素&#xff08;因为在大小排好序后&#xff0c;中位数也一定是众数&#xff09; 答案&#xff1a; int maj…

【鸿蒙 HarmonyOS 4.0】UIAbility、页面及组件的生命周期

一、背景 主要梳理下鸿蒙系统开发中常用的生命周期 二、UIAbility组件 UIAbility组件是一种包含UI界面的应用组件&#xff0c;主要用于和用户交互。 UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口&#xff1b;一个UIAbility组件中可以通过多个页…

数据价值在线化丨TiDB 在企查查数据中台的应用及 v7.1 版本升级体验

本文介绍了企查查在数据中台建设中使用 TiDB 的经验和应用。通过从 MySQL 到 TiDB 的迁移&#xff0c;企查查构建了基于 TiDB Flink 的实时数仓框架 &#xff0c;充分利用了 TiDB 的分布式架构、MySQL 兼容性和完善的周边工具等特性&#xff0c;实现了数据的在线化处理。2023 年…

svn客户端下载、安装、使用

下载、使用 打开360软件管家&#xff0c;选怎宝库&#xff0c;搜索svn&#xff0c;点击安装 可以修改安装路径 使用 在桌面右键弹出菜单&#xff0c;点击 输入地址&#xff0c;点击ok 输入用户名、密码 &#xff0c;等待检出完成

Java智慧工地管理云平台源码 带AI识别、桌面管理+大屏指挥+手机APP

目录 智慧工地云系统技术说明 1.什么是 AI 危险源识别 2.什么是标养室监测 3.什么是塔机监测 4.什么是塔机黑匣子 5.什么是升降机监测 6.什么是升降机黑匣子 7.什么是标养箱 8.什么是吊钩可视化 9.什么是吊钩追踪控制设备 10.什么是扬尘监测 11.什么是扬尘监测设备…

基于SpringBoot的停车场管理系统

基于SpringBootVue的停车场管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台首页 停车位 个人中心 管理员界面 摘要 摘要&#xff1a;随着城市化进程的…

测绘测量行业CRM功能大揭秘:哪家才是最佳选择?

测绘测量行业面临着处理及管理海量数据的难题。办公软件进行数据记录是非常繁琐的&#xff0c;往往需要花费大量的时间来查找所需的信息&#xff0c;甚至造成内容丢失。测绘测量企业运用CRM管理系统至关重要。本文将向您介绍测绘测量行业CRM功能、哪家好&#xff1f; CRM软件的…

03 表数据基本操作

文章目录 插入(insert)查询(select)where子句更新表记录(update)删除表记录&#xff08;delete&#xff09;表字段的操作(alter)时间类型数据 插入(insert) insert into 表名 values(值1&#xff0c;值2...),(值1&#xff0c;值2...),...; insert into 表名 (字段1,...) value…