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

news2024/9/22 8:20:37

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- ./?%&=]*

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

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

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

相关文章

Qt的QFileSystemModel与QTreeView、QTableView、QListView的组合使用

1.相关描述 QFileSystemModel与QTreeView、QTableView、QListView的组合&#xff0c;当QTreeView点击发生改变&#xff0c;QTableView和QListView也会发生变化 2.相关界面 3.相关代码 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h"…

微服务-微服务Spring Security6实战

1. Spring Security介绍 1.1 Spring Security定义 Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框 架。 Spring Security 主要实现了 Authentication &#xff08;认证&#xff0c;解决 who are you? &#xff09; 和…

跳槽前应该做好哪些准备?

第一次求职也好&#xff0c;还是换工作也罢&#xff0c;都需要有严谨的考虑。对于已经工作上班的朋友来说&#xff0c;切不可轻易地辞掉工作&#xff0c;想要跳槽&#xff0c;一定要三思而后行&#xff0c;有一个周密的部署。跳槽有好处&#xff0c;也有弊端&#xff0c;频繁的…

黄仁勋最新专访:机器人基础模型可能即将出现,新一代GPU性能超乎想象

最近&#xff0c;《连线》的记者采访了英伟达CEO黄仁勋。 记者表示&#xff0c;与Jensen Huang交流应该带有警告标签&#xff0c;因为这位Nvidia首席执行官对人工智能的发展方向如此投入&#xff0c;以至于在经过近 90 分钟的热烈交谈后&#xff0c;我&#xff08;指代本采访的…

手机单目相机内参标定

使用软件&#xff1a; 参考我之前的文章&#xff1a; 软件地址:https://github.com/DavidGillsjo/VideoIMUCapture-Android/releases 棋盘标定板下载 链接: https://pan.baidu.com/s/1wiPJsEf87Vc0D7KwJnt3GA?pwd1234 提取码: 1234 过程 1.使用下载的软件录制一段视频&am…

重学Java 18.学生管理系统项目

臣无祖母&#xff0c;无以至今日&#xff0c;祖母无臣&#xff0c;无以终余年 母孙二人&#xff0c;更相为命&#xff0c;是以区区不能废远 —— 陈情表.李密 —— 24.2.20 一、编写JavaBean public class Student {//学号private int id;//姓名private String name;//年龄pr…

MySQL死锁产生的原因和解决方法

一.什么是死锁 要想知道MYSQL死锁产生的原因,就要知道什么是死锁?在了解什么是死锁之前,先来看一个概念:线程安全问题 1.线程安全问题 1.1什么是线程安全问题 线程安全问题&#xff0c;指的是在多线程环境当中&#xff0c;线程并发访问某个资源&#xff0c;从而导致的原子性&a…

module ‘json‘ has no attribute ‘dumps‘

如果在使用Python的json模块时遇到AttributeError: module json has no attribute dumps错误&#xff0c;通常是因为在Python环境中json模块不支持dumps方法。这种情况可能是因为Python的json模块被重命名或修改过导致的。 解决方法可以尝试以下几种&#xff1a; 1.检查Pytho…

围剿尚未终止 库迪深陷瑞幸9.9阳谋

文|智能相对论 作者|霖霖 总能被“累了困了”的打工人优先pick的咖啡&#xff0c;刚复工就顺利站上话题C位。 #瑞幸9.9元一杯活动缩水#的话题才爬上新浪微博热搜&#xff0c;“库迪咖啡河北分公司运营总监带头坑害河北联营商”的实名举报帖就出现在了小红书&#xff0c;一时…

复旦大学MBA聚劲联合会:洞见智慧,拓宽思维格局及国际化视野

12月2日&#xff0c;“焕拥时代 俱创未来”聚劲联合会俱创会年度盛典暨俱乐部募新仪式圆满收官。16家复旦MBA俱乐部、200余名同学、校友、各界同仁齐聚复旦管院&#xff0c;一起在精彩纷呈的圆桌论坛里激荡思想&#xff0c;在活力四射的俱乐部风采展示中凝聚力量。      以…

第四十二回 假李逵翦径劫单身 黑旋风沂岭杀四虎-python读写csv和json数据

李逵答应了宋江三件事&#xff1a;不可吃酒&#xff0c;独自前行&#xff0c;不带板斧。李逵痛快答应了&#xff0c;挎一口腰刀&#xff0c;提着朴刀&#xff0c;带了一锭大银子&#xff0c;三五个小银子就下山去了。 宋江放心不下&#xff0c;于是请同乡朱贵也回家一趟&#…

Mybatis总结--传参

MyBatis 传递参数&#xff1a;从 java 代码中把参数传递到 mapper.xml 文件 六、一个简单参数&#xff1a; Dao 接口中方法的参数只有一个简单类型&#xff08; java 基本类型和 String &#xff09;&#xff0c; 占位符 #{ 任意字符 } &#xff0c;和方法的参数名无关…

浅谈SpringMVC

什么是MVC模式 MVC&#xff1a;MVC是一种设计模式 MVC的原理图&#xff1a; 分析&#xff1a; 1&#xff1a;M-Model 模型&#xff08;完成业务逻辑&#xff1a;有javaBean构成&#xff0c;servicedaoentity&#xff09; 2&#xff1a;V-View 视图&#xff08;做界面的展示…

MySQL sql注意点

本文列取了常用但是容易遗漏的一些知识点。另外关键词一般大写&#xff0c;为了便于阅读所以很多小写。也为了给自己查缺补漏。 distinct&#xff08;去重&#xff09; 也许你经常对单个字段去重&#xff0c;并且知道不建议用distinct&#xff0c;而是group by&#xff0c;因为…

Cesium 展示——加载 tileset.json 格式的模型数据

文章目录 需求分析需求 已给 tileset.json 文件,现需加载该模型文件, 该模型特点:模型上的各模块均可以进行点击设置,且相机视角拉近后可以看到内部隐藏的物件模块 分析 tileset.json :模型数据【模型加载】方法export function init3dTileLayer (option) {var tilesetMo…

让AI玩一千万次贪吃蛇

如果让人工智能来玩贪吃蛇游戏&#xff0c;会发生什么&#xff1f; 图源&#xff1a;DALLE 目录 贪吃蛇实现 游戏规则 游戏实现 Q学习算法实现 Q学习简介 Q表和Q值 Q学习更新规则 Q学习在贪吃蛇游戏中的应用 整体项目完整代码 运行过程截图 代码分析 环境设置 …

SORA技术报告

文档链接&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators 文章目录 Video generation models as world simulatorsTurning visual data into patchesVideo compression networkSpacetime latent patchesScaling transformers for video …

Linux使用C语言获取进程信息

Linux使用C语言获取进程信息 Author: OnceDay Date: 2024年2月22日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档: Linux proc目录详解_/proc/mounts-CSDN博客Linux下/proc目录介绍 - 知乎 (zhihu.com)Linux内…

该如何选择适合的服务器

服务器&#xff0c;简单来说&#xff0c;就是一个专门用来为其他计算机提供服务的计算机。 我们熟悉的网站、应用和各种在线服务&#xff0c;绝大多数都运行在一台或多台服务器中&#xff0c;所以说服务器是整个网络世界的基石。 服务器一般具有高速的CPU运算、高数据吞吐、可扩…

CrossOver虚拟机软件2024有哪些功能?最新版本支持哪些游戏?

CrossOver由codewaver公司开发的类虚拟机软件&#xff0c;目的是使linux和Mac OS X操作系统和window系统兼容。CrossOver不像Parallels或VMware的模拟器&#xff0c;而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏&#xff0c;而不…