Java---正则表达式

news2025/7/18 20:29:24

目录

一、正则表达式的介绍

二、正则表达式的基本语法

(1)字符类

(2)预定义符

(3)数量词

三、正则表达式的具体实例

         (1)判断电话号码是否符合规则

(2)简单爬虫

(3)爬取电话和邮箱

 (4)条件爬取

 (5)贪婪和非贪婪爬取

(6)正则表达式在字符串表达式中的使用


一、正则表达式的介绍

正则表达式是对字符串操作的逻辑表达式,说的是不是有点抽象呢,那说说它的作用其实更加好懂。正则表达式可以校验字符串是否符合规则(规则由你定),这样的话你就可以在一段文本内容中查找你想要的内容了

二、正则表达式的基本语法

上面说过了正则表达式其实就是对于一个字符串根据你制定的规则做出的一个逻辑判断,所以我们会使用其中的一个API,也就是matches函数,参数是你制定的规则,返回值是boolean型。即字符串.matches(规则)

(1)字符类

[abc]              只能是abc其中一个字符
[^abc]             abc这三个字符不可以被选择,其他字符可以
[a-zA-Z]           只能在a-z和A-Z这两个区间中选择,两个区间以外的字符不可被选
[a-z[A-Z]]         和第三种的意思是一样的,只能在两个区间中被选择
[a-z&&[def]]       a-z和def的交集,也就是说只能取def这三个字符其中之一
[a-z&&[^def]]      a-z中并且出了def的字符
[a-z&&[^m-p]]      a-z中除了m-p的字符,也就是[a-lq-z]

(2)预定义符

.      任意字符
\d     一个数字[0-9]
\D     非数字[^0-9]
\s     一个空白字符[\t\n\f\r]
\S     非空白字符
\w     [a-zA-Z_0-9]英文数字下划线
\W     除了英文数字下划线

(3)数量词

x?      x出现了一次或者是0次
x+      x出现了一次或者多次
x*      x出现了0次或者是多次
x{n}    x出现了正好是n次
x{n,}   x出现了至少n次
x{n,m}  x出现了至少是n次但是不超过m次

这里我提醒大家一下,千万要看清楚你写的规则是匹配一个字符还是多个字符  

三、正则表达式的具体实例

(1)判断电话号码是否符合规则

需求:十一个数字,第一个数字只能是1,最后一个数字不能是0。

public class Test {
    public static void main(String[] args){
           Scanner sca=new Scanner(System.in);
           System.out.print("请输入你的电话号码:");
           String s=sca.next();//电话号码
           String rule="1[0-9]{9}[1-9]";//定义的规则
           System.out.print(s.matches(rule));
    }
}

(2)简单爬虫

需求:一段文本中查找Java或者是Java出现的版本号

 

public class Test {
    public static void main(String[] args){
          String s="市东南部ujbis1Java12史努比偶数" +
                  "圣诞节你为奶茶店搜防静电Java1山东噢in计算Jav为oio看上你" +
                  "Java19是可能空岛生存·Java30搜坚定Java=数据库你打算";
          String regex="Java\\d{0,2}";
          Pattern p= Pattern.compile(regex);
          Matcher m=p.matcher(s);
          while(m.find()){
              System.out.println(m.group());
          }
    }
}

(3)爬取电话和邮箱

需求:在一段文本中,爬取电话号码和邮箱

public class Test {
    public static void main(String[] args){
         String s="81是的配送费打开你发182654678541所点击时间内" +
                 "ujhgtr@163.com搜的金丝楠18871110981是啊都是你的手机卡圣诞节迫使@163.com" +
                 "搜坚定yuhsyw@163.coomi1搜电脑172890987665搜绝对是gygwas163.com庶竭驽钝" +
                 "18235454567是第几行你UIUIu@163.com我似乎单词表18765432140";
         String re1="1\\d{9}[1-9]";//电话号码
         String re2="[a-zA-Z]{6}@163.com";
         String re=re1+"|"+re2;//两个规则满足其中之一即可,用竖线
         Pattern p=Pattern.compile(re);
         Matcher m=p.matcher(s);
         while(m.find()){
                System.out.println(m.group());
          }
    }
}

 

 (4)条件爬取

((?i)java)  忽略Java的大小写

(java)(?=7|8)   这里的问号其实可以理解成占位符,总体表达的意思是查找java7或者java8并且输出时
                不显示java后面的的版本号

(java)(?:7|8)  与上面相反,它是显示后面的版本号的

(java)(?!7|8)   查找除了java7和java8

需求:在一段文本中查找Java和Java17,Java8,Java7(忽略大小写)

 

public class Test {
    public static void main(String[] args){
        String s="是的苏北jaVa18是可能都跑了实力派我JaVA89osadisd我的是极品搜" +
                "JAVA17isadhoJAVA11安排激动java10时都是你我说的菜农Java12是哦滑动SOL" +
                "是冬季是破烦巴萨jAvA8开始就等你";
        String re1="((?i)java)(?=8|7|17)";//查找只输出前面的java部分
        String re2="((?i)java)(?:7|8|17)";//查找同时也输出后面的部分,也可以写成((?i)java)(7|18|17)
        String re3="((?i)java)(?!7|8|17)";//查找除了版本号是8,7,,17
        System.out.println("规则1");
        Pattern p1=Pattern.compile(re1);
        Matcher m1=p1.matcher(s);
        while(m1.find()){
            System.out.println(m1.group());
        }
        System.out.println("规则2");
        Pattern p2=Pattern.compile(re2);
        Matcher m2=p2.matcher(s);
        while(m2.find()){
            System.out.println(m2.group());
        }
        System.out.println("规则3");
        Pattern p3=Pattern.compile(re3);
        Matcher m3=p3.matcher(s);
        while(m3.find()){
            System.out.println(m3.group());
        }

    }
}

 (5)贪婪和非贪婪爬取

贪婪爬取:在爬取数据的时候尽可能的多获取数据
非贪婪爬取:在爬取数据的时候尽可能少获取数 据
只写+,*表示贪婪爬取(Java中默认是贪婪爬取)
+?,+*表示非贪婪爬取

 

public class Test {
    public static void main(String[] args){
        String s="搜绝对是你uiuisudjh怕端口abbbbb啥动静那等";
        String rex1="ab+";
        String rex2="ab?+";
        Pattern p1=Pattern.compile(rex1);
        Pattern p2=Pattern.compile(rex2);
        Matcher m1=p1.matcher(s);
        Matcher m2=p2.matcher(s);
        System.out.println("贪婪爬取");
        while(m1.find()){
            System.out.println(m1.group());
        }
        System.out.println("非贪婪爬取");
        while(m2.find()){
            System.out.println(m2.group());
        }
    }
}

 

(6)正则表达式在字符串表达式中的使用

这里主要介绍两个方法:replaceAll和split
replaceAll(规则,代替的字符串)    将字符串中符合规则的字符串替换成代替的字符串,返回值是修改后的 
                                 字符串,原来的字符串时不会发生变化的
split(规则)                      根据规则切割,返回值是字符串数组
public class Test {
    public static void main(String[] args){
        String s="李三sodjsodjso张三丰0osodndn王天霸";

        String ss=s.replaceAll("[a-zA-Z0-9]+","vs");
        System.out.println(ss);
        String[] sc=s.split("[0-9a-zA-Z]+");
        System.out.println("字符串数组:");
        for(int i=0;i<sc.length;i++){
            System.out.println(sc[i]);
        }
    }
}

 

 

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

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

相关文章

git push踩坑记录【看注意事项】

记录一次git push的踩坑过程&#xff08;详细在注意事项里&#xff0c;列出了具体的解决办法&#xff09;。 push远程仓库命令 使用命令 git init git add . git commit -m "提交说明写在这里" git remote add origin gitgithub.com:xxx/surgical-robot.git git p…

4、常用类和对象

文章目录4、常用类和对象4.1 Object4.2 数组4.3 二维数组4.4 二维数组 九层妖塔4.5 冒泡排序4.6 选择排序4.7 二分法查找4.8 字符串4.9 字符串拼接4.10 字符串比较4.11 字符串截断4.12 字符串替换4.13 字符串大小写转换4.14 字符串查询4.15 StringBuilder4.16 包装类4.17 日期类…

windows环境下python和gdal绑定方法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 编译和安装gdal 此篇介绍的方法并不需要用到pip工具,可依据自己编译的gdal库来灵活绑定。 安装gdal主要是设置两个环境变量:一是gdal的动态库路径加入到path环境变量下,如下图: 二是…

vim的常规操作

Linux系统内置vi文本编辑器&#xff0c;vim是vi的增强版 vi和vim的三种模式 正常模式&#xff1a;默认模式&#xff0c;可以使用“上下左右”键来移动光标&#xff0c;也可以用删除、复制、粘体等功能插入模式&#xff1a;按i,I,o,O,a,A,r,R等任何一个字母进入命令行模式&…

django logging的StreamHandler的一个小用法

首先先了解下&#xff0c;logging的大致结构&#xff0c;它有一个内置处理器&#xff0c;还有一个django提供的内置记录器。基本上&#xff0c;日志模块就是由这俩组成的&#xff0c;他俩的关系&#xff0c;有点水渠理论的意思。就是说&#xff0c;处理器&#xff0c;和记录器&…

MCU-51:独立按键控制LED灯的动作

目录一、独立按键二、独立按键控制LED亮灭二、消除按键抖动2.1 按键的抖动2.2 控制LED灯状态-消除按键抖动三、独立按键控制LED显示二进制四、独立按键控制LED灯移位一、独立按键 轻触按键&#xff1a;相当于是一种电子开关&#xff0c;按下时开关接通&#xff0c;松开时开关断…

微服务技术--认识微服务

技术栈&#xff1a; 认识微服务 服务架构演变 单体架构 将业务的功能集中在一个项目中开发&#xff0c;打成一个包部署优点&#xff1a; 架构简单部署成本低 缺点&#xff1a; 耦合度高 分布式架构 根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立项目开发&…

黑盒测试用例设计 - 场景法

原理 现在的软件几乎都是用时间触发来控制流程的。测试时&#xff0c;可以以生动的描述出触发时的情景&#xff0c;有利于设计测试用例&#xff0c;同时使测试用例更容易理解和执行。基本流&#xff1a;软件功能按照正确的事件流实现的一条正确流程。通常一个业务仅存在一个基…

[洛谷]P2234 [HNOI2002]营业额统计

[洛谷]P2234 [HNOI2002]营业额统计一、问题描述题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示二、问题分析1、算法标签2、思路分析三、代码实现一、问题描述 [洛谷]P2234 [HNOI2002]营业额统计 题目描述 Tiger 最近被公司升任为营业部经理&#xff0c;他上任后…

微服务系列 - Zookeeper下篇:源码解析

前言 关于zookeeper的入门到精通请阅读&#xff1a;微服务系列 - Zookeeper上篇 注&#xff1a;本内容仅用于个人学习笔记&#xff0c;如有侵扰&#xff0c;联系删除 参考文档&#xff1a;https://blog.csdn.net/mjb740074431/article/details/120173792 一、算法基础 Zook…

@Configuration注解

1.作用 Configuration注解的作用&#xff1a;声明一个类为配置类&#xff0c;用于取代bean.xml配置文件注册bean对象。 2.基础运用 Configuration注解最常见的搭配使用有两个&#xff1a;Bean和Scope Bean&#xff1a;等价于Spring中的bean标签用于注册bean对象的&#xff…

SpringBoot 过滤器、拦截器、监听器对比及使用场景

一、关系图理解 二、区别 1.过滤器 过滤器是在web应用启动的时候初始化一次, 在web应用停止的时候销毁 可以对请求的URL进行过滤, 对敏感词过滤 挡在拦截器的外层 实现的是 javax.servlet.Filter 接口&#xff0c;是 Servlet 规范的一部分 在请求进入容器后&#xff0c;但…

Java 线程的六种状态及其简易转换

1.Java中线程的状态分为六种 NEW&#xff1a;初始状态&#xff0c;线程被创建&#xff0c;但是还没有调用start()方法。 RUNNABLE&#xff1a;运行状态&#xff0c;Java线程将操作系统中的就绪和运行两种状态笼统地称作“运行中”。 BLOCKED&#xff1a;阻塞状态,表示线程阻塞于…

IJCAI-2022 多级发射方法的脉冲神经网络

原文链接&#xff1a;CSDN-脉冲神经网络&#xff08;SNN&#xff09;论文阅读&#xff08;四&#xff09;-----IJCAI-2022 多级发射方法的脉冲神经网络 Multi-Level Firing with Spiking DS-ResNet: Enabling Better and Deeper Directly-Trained Spiking Neural Networks目录说…

SAP UI5 Smart Table 和 Smart Filter Bar 的联合使用方法介绍试读版

本教程第 147 个步骤&#xff0c;我们介绍了 SAP UI5 Smart Table 控件的用法&#xff1a; SAP UI5 应用开发教程之一百四十七 - SAP UI5 SmartTable 控件的使用介绍 如下图所示&#xff1a; 本步骤我们在 Smart Table 本身的基础上再进一步&#xff0c;学习如何将 Smart Tab…

占道摆摊经营监控报警系统 yolov5

占道摆摊经营监控报警系统通过Python基于yolov5深度学习网络模型&#xff0c;对城市道路区域实时检测&#xff0c;当yolov5模型检测到有流动摊点摆摊违规经营时&#xff0c;立即抓拍告警。Yolo模型采用预定义预测区域的方法来完成目标检测&#xff0c;具体而言是将原始图像划分…

[java]-JDBC

JDBC 是 Java 连接数据库的一种方式&#xff0c;它是一种 Java API&#xff0c;可以用于连接数据库&#xff0c;并且可以访问数据库中的数据。 JDBC 原理 JDBC 是接口&#xff0c;驱动是接口的实现&#xff0c;没有驱动将无法完成数据库连接&#xff0c;从而不能操作数据库!每…

USB TO SPI(上海同旺电子)调试器调试MCP4822

所需设备&#xff1a; 1、USB TO SPI(上海同旺电子)&#xff1b; 2、MCP4822&#xff1a;双通道12 位电压输出DAC; 特性 • MCP4802&#xff1a;双通道8 位电压输出DAC • MCP4812&#xff1a;双通道10 位电压输出DAC • MCP4822&#xff1a;双通道12 位电压输出DAC • 轨对…

React18:创建React项目(自动)

文章目录使用步骤项目目录结构Node_modulesPublicSrcPackage.Json总结使用步骤 打开命令行进入到项目所在目录使用如下命令&#xff1a;npx create-react-app 项目名 注意&#xff1a;项目名不能带大写字符 项目目录结构 项目目录结构如下&#xff1a; react-app├─ no…

网络实验之RIPV2协议(二)

一、RIPV2协议和实验简介 RIP-2是一种无类别路由协议&#xff08;Classless Routing Protocol&#xff09;&#xff0c;支持路由标记&#xff0c;在路由策略中可根据路由标记对路由进行灵活的控制。报文中携带掩码信息&#xff0c;支持路由聚合和CIDR&#xff08;Classless Int…