【java 正则表达式 笔记】

news/2024/12/23 20:14:52 标签: java, 正则表达式, 笔记

文章目录

  • 快速入门
    • 匹配中文或数字或大小写字母(一个或多个)
  • 正则表达式底层实现(重要)
    • mather.find() 完成的任务
    • mather.group(0) 分析
  • 正则表达式基本语法
    • 元字符
      • 转义字符
      • 区分大小写
      • 限定字符
      • 选择匹配符
      • 特殊字符
      • 字符匹配符
      • 定位符
    • 分组、捕获和反向引用
      • 捕获
      • 特别分组
      • 反向引用
        • 经典结巴程序
  • 三个常用类
    • Pattern
      • 常用方法
        • matches 整体匹配
    • Matcher
      • 常用方法
    • PatternSyntaxException
  • 应用实例
    • 匹配汉字、邮政编码、qq号码、手机号
    • 匹配url
    • 对url进行解析
  • String中使用正则表达式
    • 替换
    • 验证手机号
    • 分割匹配
    • 验证是不是整数或者小数
    • 分割匹配
    • 验证是不是整数或者小数

快速入门

简单的说:正则表达式是对字符串执行模式匹配的技术。

正则表达式:regular expression=>RegExp

匹配中文或数字或大小写字母(一个或多个)

java">String content = "abc12ABC34231esdfsABCdsadd想问ABC下我下午";
// 创建Pattern对象,模式对象
Pattern pattern = Pattern.compile("([\\u4e00-\\u9fff]+)|([0-9]+)|([a-zA-Z]+)");
// 创建匹配器对象
//理解:就是matcher匹配器按照 pattern(模式/样式),到content文本中去匹配
// 找到就返回true,否则就返回false
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
    // 匹配内容、文本,放到 m.group(0)
    System.out.println(matcher.group(0));
}

在这里插入图片描述

输出

在这里插入图片描述

正则表达式底层实现(重要)

mather.find() 完成的任务

在这里插入图片描述

考虑分组

在这里插入图片描述

在这里插入图片描述

mather.group(0) 分析

在这里插入图片描述

1.根据groups[0]=0和groups[1]=4的记录的位置,从content开始截取子字符串返回
就是[0,4) 包含0但是不包含索引为4的位置

如果再次指向find方法,仍然按上面分析来执行

在这里插入图片描述

//1小结
//1.如果正则表达式有()即分组
//2.取出匹配的字符串规则如下
//3. group(0)表示匹配到的子字符串
//4. group(1)表示匹配到的子字符串的第1组字串
//5. group(2)表示匹配到的子字符串的第2组字串
//16. … 但是分组的数不能越界

在这里插入图片描述

正则表达式基本语法

元字符

转义字符

在Java的正则表达式中,两个\代表其他语
言中的一个\

在这里插入图片描述

区分大小写

java正则表达式默认是区分字母大小写的,如何实现不区分大小写

在这里插入图片描述

限定字符

在这里插入图片描述

在这里插入图片描述

细节:java匹配默认贪婪匹配,即尽可能匹配多的

选择匹配符

在这里插入图片描述

特殊字符

字符匹配符

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

定位符

在这里插入图片描述

分组、捕获和反向引用

1.分组
我们可以用圆括号组成一个比较复杂的匹配模式,那么一个圆括号的部分我们可
以看作是一个子表达式/一个分组。
2.捕获
正则表达式中子表达式/分组匹配的内容,保存到内存中以数字编号或显式命名
的组里,方便后面引用,从左向右,以分组的左括号为标志,第一个出现的分组
的组号为1,第二个为2,以此类推。组0代表的是整个正则式
3.反向引用
圆括号的内容被捕获后,可以在这个括号后被使用,从而写出一个比较实用的匹
配模式,这个我们称为反向引用,这种引用既可以是在正则表达式内部,也可以是
正则表达式外部,内部反向引用分组号,外部反向引用$分组号

捕获

在这里插入图片描述

特别分组

在这里插入图片描述

反向引用

在这里插入图片描述

在这里插入图片描述

经典结巴程序
java">String content = "我...我要...学学学学...编程java";
// 去掉所有的.
Pattern pattern = Pattern.compile("\\.");
Matcher matcher = pattern.matcher(content);
content = matcher.replaceAll("");
System.out.println(content);

//String regExp = "([\\u4e00-\\u9fff])\\1+([\\u4e00-\\u9fff])\\2?([\\u4e00-\\u9fff])\\3+([\\u4e00-\\u9fff]+)+(\\w+)";

//        pattern = Pattern.compile("(.)\\1+");
//        matcher = pattern.matcher(content);
//        while (matcher.find()) {
//            System.out.println("找到=" + matcher.group());
//        }
//        // 使用 反向引用$1 来替换匹配到的内容
//        content = matcher.replaceAll("$1");
//        System.out.println(content);

// 使用一条语句 去掉重复的字
content = Pattern.compile("(.)\\1+").matcher(content).replaceAll("$1");
System.out.println(content);

在这里插入图片描述

三个常用类

java.util.regex包主要包括以下三个类Pattern类、Matcher类和PatternSyntaxException

Pattern类
pattern对象是一个正则表达式对象。Pattern类没有公共构造方法。要创建一个Pattern对
象,调用其公共静态方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第
一个参数,比如:Pattern r=Pattern.compile(pattern);

Matcher类
Matcher对象是对输入字符串进行解释和匹配的引擎。与Pattern类一样,Matcher也没有
公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象

PatternSyntaxException
PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

Pattern

常用方法

matches 整体匹配

用于整体匹配,在验证输入的字符串是否满足条件使用

在这里插入图片描述

Matcher

常用方法

在这里插入图片描述

替换

在这里插入图片描述

PatternSyntaxException

应用实例

匹配汉字、邮政编码、qq号码、手机号

java">String content = "韩顺平教育";
content = "13588889999";
// 汉字
//String regExp = "^[\u0391-\uffe5]+$";

// 邮政编码
// 要求:是1-9开头的六位数
//String regExp = "^[1-9]\\d{5}$";

// qq号码
// 要求:1-9开头的一个(5位数-10位数)
//String regExp = "^[1-9]\\d{4,9}$";

// 手机号码
// 要求:必须以13,14,15,18 开头的11位数,比如  13588889999
String regExp = "^1[3|4|5|8]\\d{9}$";
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(content);
if(matcher.find()) {
System.out.println(matcher.group(0));
}

匹配url

java">String content = "https://www.bilibili.com/video/BV1fh411y7R8?p=894&vd_source=c12af894764c0594ed08999165cda06a";
String regExp = "^((http|https)://)?([\\w-]+\\.)+[\\w-]+(/[\\w-?=&/%.#]*)?$";
Pattern compile = Pattern.compile(regExp);
Matcher matcher = compile.matcher(content);
if (matcher.find()) {
    System.out.println(matcher.group());
}

在这里插入图片描述

对url进行解析

在这里插入图片描述

java">String url = "https://www.google.com:8080/abc/index.html";
String regExp = "^(https?)?(?:://)?(\\w+\\.\\w+\\.?\\w*\\.?\\w+)+(?::(\\d{2,5}))?(?:/\\w+/)?(\\w+\\.[a-zA-Z]+)?$";
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(url);
if (matcher.matches()) {
    System.out.println("协议:" +matcher.group(1));
    System.out.println("域名:" +matcher.group(2));
    System.out.println("端口:" +matcher.group(3));
    System.out.println("文件名:" +matcher.group(4));
} else {
    System.out.println("匹配失败");
}

在这里插入图片描述

在这里插入图片描述

String中使用正则表达式

替换

在这里插入图片描述

验证手机号

在这里插入图片描述

分割匹配

在这里插入图片描述

验证是不是整数或者小数

在这里插入图片描述

分割匹配

在这里插入图片描述

验证是不是整数或者小数

在这里插入图片描述


http://www.niftyadmin.cn/n/5796946.html

相关文章

行数据转换为list的小工具

遇到email 邮件,收件人多的时候要以 ; 进行分隔 数据库 select 的条件 in (xxxxx,xxx)要用逗号分隔 python list 则是[xxxx,xxxx] 逗号分隔,而且还要添加 " " 整理这个数据实在麻烦 希望效果如下:这样以…

2024多模态大模型综述最新总结

摘要 随着人工智能技术的快速发展,多模态大模型(MLLM)已成为研究的新热点。这些模型以强大的大型语言模型(LLM)为基础,能够处理和理解多种模态信息,如文本、图像、视频和音频。本文综述了MLLM的…

详细ECharts图例3添加鼠标单击事件的柱状图

<!DOCTYPE html><html><head><meta charset"UTF-8"><script src"js/echarts.js"></script> <!-- 确保路径正确 --><title>添加鼠标单击事件的柱状图</title></head><body><div id&q…

【机器人】机械臂位置、轨迹和转矩控制概要

仍旧以 RRR&#xff08;三连杆&#xff09;为例&#xff0c;实现控制&#xff0c;可以采用以下步骤。这里的控制包括 位置控制轨迹控制 轨迹跟踪控制&#xff0c; 具体根据应用需求选择。以下是实现 RRR 机械臂控制的完整过程&#xff1a; 1. 定义机器人模型 通过 Denavit-H…

服务器上加入SFTP------(小白篇 1)

在服务器上配置 SFTP (基于 SSH 的文件传输协议) 通常比传统 FTP 更安全&#xff0c;因为它默认加密通信。以下是详细的配置步骤&#xff0c;以 Ubuntu 或 CentOS 为例。 1.服务器上加入SFTP------(小白篇 1) 2.加入SFTP 用户------(小白篇 2) 3.代码加入SFTP JAVA —&#…

Java-32 深入浅出 Spring - IoC 基础 启动IoC 纯注解方式 SpringConfig web.xml

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

Rust之抽空学习系列(五)—— 所有权(上)

Rust之抽空学习系列&#xff08;五&#xff09;—— 所有权&#xff08;上&#xff09; 1、什么是所有权 所有权是确保Rust程序安全的一种机制 安全则是指程序中没有未定义的行为未定义的行为是指在执行一段代码时&#xff0c;结果不可预测且未被编程语言指定的情况Rust的基…

AI的进阶之路:从机器学习到深度学习的演变(三)

&#xff08;承接上集&#xff1a;AI的进阶之路&#xff1a;从机器学习到深度学习的演变&#xff08;二&#xff09;&#xff09; 四、深度学习&#xff08;DL&#xff09;&#xff1a;机器学习的革命性突破 深度学习&#xff08;DL&#xff09;作为机器学习的一个重要分支&am…