黑马Java零基础视频教程精华部分_14_正则表达式

news/2024/9/17 19:03:33/ 标签: java, 正则表达式, 开发语言

系列文章目录


文章目录

  • 系列文章目录
  • 一、先爽一下正则表达式
    • 不使用正则的情况下
    • 使用正则的情况下
  • 二、正则表达式的作用
  • 三、正则表达式具体表达
    • 1、规则
    • 2、字符类示例
    • 3、预定义字符示例
      • 首先学习转义字符
    • 示例练习
  • 四、基本练习
    • 1、快捷方法:
    • 2、验证手机号
    • 3、验证座机电话号码
    • 4、验证邮箱号码
  • 五、正则表达式小结


一、先爽一下正则表达式

正则表达式可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性。
需求:假如现在要求校验一个g9号码是否正确。
规则:6位及20位之内,0不能在开头,必须全部是数字
先使用目前所学知识完成校验需求
然后体验一下正则表达式检验。

不使用正则的情况下

java">public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str = sc.nextLine();System.out.println(check(str));}public static boolean check(String str){if(str.length()<6 || str.length()>20){return false;}if(str.charAt(0)==0){return false;}for (int i = 0; i < str.length(); i++) {if(str.charAt(i)<'0'||str.charAt(i)>'9'){return false;}}return true;}}

使用正则的情况下

java">String qq ="1234567890";
System.out.println(qq.matches("[1-9]\\d{5,19}"));

二、正则表达式的作用

  1. 作用一:校验字符串是否满足规则
  2. 作用二:在一段文本中查找满足要求的内容

三、正则表达式具体表达

1、规则

在这里插入图片描述
通过查看参考文档找到:
在这里插入图片描述

2、字符类示例

java"> public static void main(String[] args) {//public boolean matches(String regex):判断是否与正则表达式匹配,匹配返回true// 只能是a b cSystem.out.println("-----------1-------------");System.out.println("a".matches("[abc]")); // trueSystem.out.println("z".matches("[abc]")); // falseSystem.out.println("ab".matches("[abc]")); // falseSystem.out.println("ab".matches("[abc][abc]")); // true// 不能出现a b cSystem.out.println("-----------2-------------");System.out.println("a".matches("[^abc]")); // falseSystem.out.println("z".matches("[^abc]")); // trueSystem.out.println("zz".matches("[^abc]")); //falseSystem.out.println("zz".matches("[^abc][^abc]")); //true// a到zA到Z(包括头尾的范围)System.out.println("-----------3-------------");System.out.println("a".matches("[a-zA-z]")); // trueSystem.out.println("z".matches("[a-zA-z]")); // trueSystem.out.println("aa".matches("[a-zA-z]"));//falseSystem.out.println("zz".matches("[a-zA-Z]")); //falseSystem.out.println("zz".matches("[a-zA-Z][a-zA-Z]")); //trueSystem.out.println("0".matches("[a-zA-Z]"));//falseSystem.out.println("0".matches("[a-zA-Z0-9]"));//true// [a-d[m-p]] a到d,或m到pSystem.out.println("-----------4-------------");System.out.println("a".matches("[a-d[m-p]]"));//trueSystem.out.println("d".matches("[a-d[m-p]]")); //trueSystem.out.println("m".matches("[a-d[m-p]]")); //trueSystem.out.println("p".matches("[a-d[m-p]]")); //trueSystem.out.println("e".matches("[a-d[m-p]]")); //falseSystem.out.println("0".matches("[a-d[m-p]]")); //false// [a-z&&[def]] a-z和def的交集。为:d,e,fSystem.out.println("----------5------------");System.out.println("a".matches("[a-z&[def]]")); //falseSystem.out.println("d".matches("[a-z&&[def]]")); //trueSystem.out.println("0".matches("[a-z&&[def]]")); //false// [a-z&&[^bc]] a-z和非bc的交集。(等同于[ad-z])System.out.println("-----------6------------_");System.out.println("a".matches("[a-z&&[^bc]]"));//trueSystem.out.println("b".matches("[a-z&&[^bc]]")); //falseSystem.out.println("0".matches("[a-z&&[^bc]]")); //false// [a-z&&[^m-p]] a到z和除了m到p的交集。(等同于[a-1q-z])System.out.println("-----------7-------------");System.out.println("a".matches("[a-z&&[^m-p]]")); //trueSystem.out.println("m".matches("[a-z&&[^m-p]]")); //falseSystem.out.println("0".matches("[a-z&&[^m-p]]")); //false}

3、预定义字符示例

首先学习转义字符

\ 是转义字符 改变后面那个字符原本的含义
练习:以字符串的形式打印一个双引号
"在Java中表示字符串的开头或者结尾

java">//此时\表示转义字符,改变了后面那个双引号原本的含义
//把他变成了一个普普通通的双引号而已。
System.out.println("\"");

我们经常碰见在书写路径时需要加双斜杠,而不能是单斜杠。

java">// \表示转义字符
//两个\的理解方式:前面的\是一个转义字符,改变了后面\原本的含义,把他变成一个普普通通的\而已。
System.out.println("c:Users\\moon\\IdeaProjects\\basic-code\\myapi\\src\\com\\itheima\\a08regexdemo\\RegexDemo1.java");

示例练习

java">//.表示任意一个字符
System.out.println("你".matches("..")); //false
System.out.println("你".matches(".")); //true
System.out.println("你a".matches(".."));//true// \\d 表示任意的一个数字
// \\d只能是任意的一位数字
// 简单来记:两个\表示一个\
System.out.println("a".matches("\\d")); // false
System.out.println("3".matches("\\d")); // true
System.out.println("333".matches("\\d")); // false//\\w只能是一位单词字符[a-zA-Z_0-9]
System.out.println("z".matches("\\w")); // true
System.out.println("2".matches("\\w")); // true
System.out.println("21".matches("\\w")); // false
System.out.println("你".matches("\\w"));//false// 非单词字符
System.out.println("你".matches("\\W")); // true
System.out.println("---------------------------------------------");
// 以上正则匹配只能校验单个字符。// 必须是数字 字母 下划线 至少 6位
System.out.println("2442fsfsf".matches("\\w{6,}"));//true
System.out.println("244f".matches("\\w{6,}"));//false// 必须是数字和字符 必须是4位
System.out.println("23dF".matches("[a-zA-Z0-9]{4}"));//true
System.out.println("23 F".matches("[a-zA-Z0-9]{4}"));//false
System.out.println("23dF".matches("[\\w&&[^_]]{4}"));//true
System.out.println("23_F".matches("[\\w&&[^_]]{4}"));//false

四、基本练习

1、快捷方法:

安装any-rule插件如下图所示:
在这里插入图片描述
之后点击右键即可发现多了一个AnyRule选项,选择后可进行快速填写正则表达式
在这里插入图片描述

2、验证手机号

java"> /*需求请编写正则表达式验证用户输入的手机号码是否满足要求。请编写正则表达式验证用户输入的邮箱号是否满足要求。请编写正则表达式验证用户输入的电话号码是否满足要求。验证手机号码 13112345678 13712345667 13945679027 139456790271验证座机电话号码 020-2324242 02122442 027-42424 0712-3242434验证邮箱号码 3232323@qq.com zhangsan@itcast.cnn dlei0009@163.com dlei0009@pci.com.cn*///心得://拿着一个正确的数据,从左到右依次去写。//13112345678//分成三部分://第一部分:1 表示手机号码只能以1开头//第二部分:[3-9] 表示手机号码第二位只能是3-9之间的//第三部分:\\d{9} 表示任意数字可以出现9次,也只能出现9次String regex1 = "1[3-9]\\d{9}";System.out.println("13112345678".matches(regex1));//trueSystem.out.println("13712345667".matches(regex1));//trueSystem.out.println("13945679027".matches(regex1));//trueSystem.out.println("139456790271".matches(regex1));//false

3、验证座机电话号码

java">//座机电话号码//020-2324242 02122442 027-42424 0712-3242434//思路://在书写座机号正则的时候需要把正确的数据分为三部分//一:区号@\\d{2,3}//      0:表示区号一定是以0开头的//      \\d{2,3}:表示区号从第二位开始可以是任意的数字,可以出现2到3次。//二:- ?表示次数,日次或一次//三:号码 号码的第一位也不能以日开头,从第二位开始可以是任意的数字,号码的总长度:5-10位String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";System.out.println("020-2324242".matches(regex2));System.out.println("02122442".matches(regex2));System.out.println("027-42424".matches(regex2));System.out.println("0712-3242434".matches(regex2));

4、验证邮箱号码

java">//3232323@qq.com zhangsan@itcast.cnn dlei0009@163.com dlei0009@pci.com.cn//思路://在书写邮箱号码正则的时候需要把正确的数据分为三部分//第一部分:@的左边 \\w+//      任意的字母数字下划线,至少出现一次就可以了//第二部分:@ 只能出现一次//第三部分://      3.1         .的左边[\\w&&[^_]]{2,6}//                  任意的字母加数字,总共出现2-6次(此时不能出现下划线)//      3.2         . \\.//      3.3         大写字母,小写字母都可以,只能出现2-3次[a-zA-Z]{2,3}//      我们可以把3.2和3.3看成一组,这一组可以出现1次或者两次String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";System.out.println("3232323@qq.com".matches(regex3));System.out.println("zhangsan@itcast.cnn".matches(regex3));System.out.println("dlei0009@163.com".matches(regex3));System.out.println("dlei0009@pci.com.cn".matches(regex3));

五、正则表达式小结

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/1507075.html

相关文章

02.CH59x入门指南——点亮LED

CH59x入门指南——点亮LED 文章目录 CH59x入门指南——点亮LED一、简介二、准备工作2.1 硬件条件2.2 项目条件 三、项目实现3.1 硬件部分3.2 软件部分3.3 运行结果 四、写在最后 ​ 一、简介 从本文开始&#xff0c;即将一一介绍 CH59x 的相关外设以及使用方法。 从任何一块芯…

Linux Shell编程--变量

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 变量&#xff1a; bash作为程序设计语言和其它高级语言一样也提供使用和定义变量的功能 预定义变量、环境变量、自定义变量、位置变量 一、自定义变…

self的使用

目录 一、看一段代码&#xff0c;并分析问题 二、二说self 1、成员方法定义的基本语法 2、使用细节 一、看一段代码&#xff0c;并分析问题 class Dog:name"波斯猫"age2def info(self,name):print(f"name信息&#xff1a;{name}") # 加菲猫dogDog() …

Dirsearch 工具的安装、使用详细教程

Dirsearch 工具的安装、使用详细教程 Dirsearch简介 安装步骤 语法及参数 常见Payload 渗透实例 总结 Dirsearch简介 Dirsearch 是一个用于探测Web服务器上的隐藏目录和文件的工具。它通过发送HTTP请求来尝试访问可能存在的路径&#xff0c;从而找到不列在网站目录页面上的…

河工院首届工业设计大赛程序组(挑战赛)题解

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 寻找ACMer 思想&#xff1a; 签到题按照题意遍历字符串&#xff0c;不断向后寻找包含 ACMer 完整字符串的数量即可 std标程&#xff1a; #include <iostream> #include <cstring> #include …

人工智能时代,程序员如何保持核心竞争力?

人工智能时代&#xff0c;程序员如何保持核心竞争力&#xff1f; 在人工智能的浪潮中&#xff0c;程序员的角色和工作方式正在经历前所未有的变革。AIGC技术的兴起&#xff0c;如ChatGPT、Midjourney、Claude等&#xff0c;预示着AI辅助编程工具的日益普及。面对这一趋势&…

海量日志数据收集监控平台应该怎么设计和实现

设计和实现一个海量日志数据收集和监控平台&#xff0c;需要考虑以下几个关键方面&#xff1a;数据采集、数据存储、实时处理、监控与告警、可视化分析、扩展性和高可用性。以下是一个详细的设计和实现方案&#xff1a; 1. 需求分析 日志来源&#xff1a;明确日志的来源&…

图谱驱动的智能:如何用Django实现GraphRAG的高效检索

前言 前面一章讲述了构建知识图谱来提高基于 RAG 的应用程序的准确性,并且使用 Neo4j 和 LangChain 在 RAG 应用程序中构建和检索知识图谱信息。 图形检索增强生成 (Graph RAG) 这种方法利用图形数据库的结构化特性,将数据组织为节点和关系,以增强检索信息的深度和上下文性…

HDFS写入数据的流程图

1.客户端向namenode发送请求&#xff0c;请示写入数据 2.namenode接受请求后&#xff0c;判断这个用户是否有写入权限&#xff0c;如果不具备直接报错&#xff1b;如果有写入权限&#xff0c;接着判断在要写入的目录下是否已经存在这个文件&#xff0c;如果存在&#xff0c;直…

Ubuntu gnome WhiteSur-gtk-theme类mac主题正确安装和卸载方式

目录 摘要目的安装和卸载特别说明 Ubuntu gnome WhiteSur-gtk-theme类mac主题正确安装和卸载方式 摘要 Ubuntu版本&#xff1a;ubuntu24.04 主题下载地址&#xff1a;https://github.com/vinceliuice/WhiteSur-gtk-theme 参考的安装教程&#xff1a;https://blog.51cto.com/u_…

Mybatis的详细讲解

1.前情提要 1.1三层架构 &#xff08;1&#xff09;表现层 Controller 表现层是表示的事数据的接受&#xff0c;参数的校验&#xff0c;参数的转换&#xff0c;结果的转换&#xff0c;结果的返回 &#xff08;2&#xff09;业务逻辑层 Service 介于表现层和业务逻辑层之…

使用Cisco软件进行模拟万维网配置访问服务器过程

万维网(www)实验 文章目录 万维网(www)实验1.实验目的2.实验流程3.实验步骤 1.实验目的 1&#xff09;理解www站点 2&#xff09;理解上层应用和下层通信网络的关系 2.实验流程 开始 → 布置拓扑 → 配置路由及IP地址 → 配置web服务器→ 访问服务器 →结束 3.实验步骤 1&…

Vercel Error: (Azure) OpenAI API key not found

题意&#xff1a;Vercel 错误&#xff1a;(Azure) OpenAI API 密钥未找到 问题背景&#xff1a; I implemented openAI API in my Next.js app with the help of langchain library and it works superb on localhost, but in Vercel (ProVersion) it throws an error: 我使用…

js函数的arguments 对象

arguments对象是函数中传递的参数值的集合。 它是⼀个类似数组的对象&#xff0c;因为它有⼀个length属性&#xff0c; 我们可以使⽤数组索引表示法arguments[1]来访问单个值&#xff0c;但它没有数组中的内置⽅法&#xff0c; 如&#xff1a;forEach、reduce、filter和map。 …

AI的IDE:Cursor配置虚拟python环境(conda)

AI的IDE&#xff1a;Cursor配置虚拟python环境&#xff08;conda&#xff09; Cursor是一个AI的IDE&#xff0c;是从VSCode源代码中fork出来的&#xff0c;专注于和AI一起Coding而生。https://www.cursor.com/是官方地址。最近开始逐渐的试用Cursor&#xff0c;之前一直是VSCod…

机器学习之随机森林

文章目录 1. 随机森林概述1.1 定义与起源1.2 与其他算法的比较 2. 随机森林的工作原理2.1 决策树基础2.2 Bagging机制2.3 随机性的引入 3. 随机森林的构建过程3.1 数据准备3.2 特征选择3.3 多棵树的集成 4. 随机森林的优缺点分析4.1 优势4.2 局限性 5. 随机森林的应用场景5.1 分…

Kali Linux——网络安全的瑞士军刀

一、引言 在网络安全的领域中&#xff0c;Kali Linux 宛如一把强大而全能的瑞士军刀&#xff0c;为安全研究人员和专业人士提供了丰富的工具和资源。本文将深入探讨 Kali Linux 的特点、优势、常用工具以及实际应用场景&#xff0c;带您领略这一强大操作系统的魅力。 二、Kal…

OpenCV||超详细的图像金字塔

图像金字塔是一种图像的多尺度表示方法&#xff0c;它通过对原始图像进行一系列的处理&#xff0c;生成一系列分辨率逐渐降低的图像集合。这些图像按照分辨率从高到低&#xff08;或从低到高&#xff09;的顺序排列&#xff0c;形成类似金字塔的结构&#xff0c;因此得名图像金…

Basic‘ attribute type should not be a container解决方法

在使用Spring Data JPA的时候&#xff0c;实体类中定义一个用List修饰的成员ip&#xff0c;IDEA会提示Basic‘ attribute type should not be a container错误&#xff0c;导致编译不通过。 查阅一些博客和文档说是Spring Data JPA这个框架会把实体类的属性当做是MySQL数据库中…

深入理解Transformer技术原理

一、什么是注意力机制 在深入了解Transformer的架构原理之前&#xff0c;我们首先要了解下&#xff0c;什么是注意力机制。人类的大脑对于信息的获取也存在注意力机制&#xff0c;下面我举几个简单的例子&#xff1a;从上面的图片中&#xff0c;我们可能更容易关注&#xff0c…