java 正则表达式介绍

news2024/9/21 0:43:02

        Java正则表达式是一种强大的文本处理工具,它允许你进行模式匹配、搜索和文本操作。正则表达式提供了一种简洁、灵活的方式来处理字符串,可以用于各种应用场景,如数据验证、文本解析、搜索和替换等。
        正则表达式的基础知识


        正则表达式是由普通字符(如字母和数字)和特殊字符(称为元字符)组成的字符串。普通字符在正则表达式中匹配它们自己,而元字符具有特殊含义,可以代表一类字符或控制匹配行为。
        常见元字符:
- `.`:匹配除换行符以外的任意字符。
- `[]`:匹配括号内的任意一个字符,例如 `[abc]` 匹配 `'a'`、`'b'` 或 `'c'`。
- `[^]`:匹配不在括号内的任意一个字符,例如 `[^abc]` 匹配除 `'a'`、`'b'`、`'c'` 之外的任意字符。
- `*`:匹配前面的子表达式零次或多次,例如 `bo*` 匹配 `'bo'`、`'booo'` 等。
- `+`:匹配前面的子表达式一次或多次,例如 `bo+` 不匹配 `'b'`,但匹配 `'bo'`、`'booo'` 等。
- `?`:匹配前面的子表达式零次或一次,例如 `do(es)?` 匹配 `'do'` 或 `'does'`。
- `{n}`:匹配前面的子表达式恰好 `n` 次,例如 `a{2}` 只匹配 `'aa'`。
- `{n,}`:匹配前面的子表达式至少 `n` 次,例如 `a{2,}` 匹配 `'aa'`、`'aaa'` 等。
- `{n,m}`:匹配前面的子表达式至少 `n` 次且不超过 `m` 次,例如 `a{2,3}` 匹配 `'aa'` 或 `'aaa'`。
        字符类:
- `\d`:匹配任意数字,等价于 `[0-9]`。
- `\D`:匹配任意非数字字符,等价于 `[^0-9]`。
- `\w`:匹配任意单词字符(字母、数字、下划线),等价于 `[a-zA-Z0-9_]`。
- `\W`:匹配任意非单词字符,等价于 `[^a-zA-Z0-9_]`。
- `\s`:匹配任意空白字符(空格、制表符、换行符等),等价于 `[ \t\n\x0B\f\r]`。
- `\S`:匹配任意非空白字符,等价于 `[^ \t\n\x0B\f\r]`。
        边界匹配符:
- `^`:匹配输入字符串的开始位置。
- `$`:匹配输入字符串的结束位置。
        分组和捕获:
- `()`:标记一个子表达式的开始和结束位置,子表达式可以用于后续的操作,如反向引用。
- `(?:)`:非捕获组,用于匹配但不捕获子表达式。
        Java正则表达式的主要应用场景
1. **数据验证**:在用户输入数据时,使用正则表达式来验证数据的格式是否正确,例如邮箱地址、电话号码、日期格式等。
2. **文本搜索**:在大量文本中搜索符合特定模式的字符串,例如日志文件分析、关键词提取等。
3. **文本替换**:根据特定模式替换文本中的字符串,例如批量替换文档中的特定词汇。
4. **文本解析**:从文本中提取有用信息,例如解析HTML页面、解析配置文件等。
5. **密码强度检查**:验证用户设置的密码是否符合安全要求,例如包含大小写字母、数字和特殊字符等。
        Java正则表达式的主要核心API


Java提供了`java.util.regex`包来支持正则表达式操作,主要的核心API有:
1. **Pattern类**:用于编译正则表达式。通过调用`Pattern.compile(String regex)`静态方法,可以将正则表达式编译成一个`Pattern`对象。
2. **Matcher类**:用于对输入字符串进行正则表达式匹配操作。通过调用`Pattern`对象的`matcher(CharSequence input)`方法,可以获得一个`Matcher`对象。
3. **PatternSyntaxException**:当正则表达式的语法不正确时,抛出此异常。
        示例代码
以下是一个简单的示例,展示了如何使用Java正则表达式进行字符串匹配:


import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexExample {
    public static void main(String[] args) {
        String regex = "foo";
        String input = "foobar";
        Pattern pattern = Pattern.compile(regex);
   
        Matcher matcher = pattern.matcher(input);
        if (matcher.find()) {
            System.out.println("Match found");
        } else {
            System.out.println("Match not found");
        }
    }
}


        这个示例中,我们定义了一个正则表达式 `foo`,并使用 `Pattern.compile` 方法将其编译为 `Pattern` 对象。然后,我们创建了一个 `Matcher` 对象,将输入字符串 `"foobar"` 传递给它。通过调用 `matcher.find()` 方法,我们可以检查输入字符串是否包含与正则表达式匹配的子串。如果找到匹配项,`find()` 方法将返回 `true`。
        分组和捕获示例
        正则表达式中的分组和捕获允许我们提取匹配的特定部分,并在后续的操作中使用这些部分。以下是一个示例,展示了如何使用分组和捕获来提取电子邮件地址的本地部分和域名:


import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class CaptureGroupExample {
    public static void main(String[] args) {
        String regex = "^(\\w+)@(\\w+\\.\\w+)$";
        String input = "john.doe@example.com";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        if (matcher.matches()) {
            System.out.println("Local part: " + matcher.group(1));
            System.out.println("Domain: " + matcher.group(2));
        } else {
            System.out.println("Invalid email address");
        }
    }
}


        在这个示例中,正则表达式 `^(\\w+)@(\\w+\\.\\w+)$` 包含两个分组,分别用于匹配电子邮件地址的本地部分和域名。`^` 和 `$` 分别确保匹配从字符串的开始到结束。`\\w+` 匹配单词字符,`@` 和 `\\.\\w+` 分别匹配 `@` 和域名。`matcher.group(1)` 和 `matcher.group(2)` 方法用于提取匹配的分组。
        替换示例
        正则表达式还可以用于文本替换操作。以下是一个示例,展示了如何使用 `replaceAll` 方法将文本中的所有数字替换为星号:


import java.util.regex.Pattern;
public class ReplaceExample {
    public static void main(String[] args) {
        String regex = "\\d";
        String input = "The price is 100 dollars.";
        String output = Pattern.compile(regex).matcher(input).replaceAll("*");
        System.out.println(output);
    }
}


在这个示例中,`\\d` 正则表达式匹配任意数字,`replaceAll("*")` 方法将所有匹配的数字替换为星号。输出将是 `"The price is *** dollars."`。
        总结
        Java正则表达式是一种强大的文本处理工具,它可以用于各种应用场景,如数据验证、文本搜索、文本替换和文本解析。通过 `java.util.regex` 包提供的 `Pattern` 和 `Matcher` 类,我们可以轻松地编写复杂的正则表达式,以匹配、查找和操作文本数据。正则表达式的分组和捕获功能使我们能够精确地提取文本中的特定部分,而替换功能允许我们快速地修改文本内容。尽管正则表达式可能会有些难以理解,但它们提供了一种非常灵活和高效的方式来处理字符串。

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

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

相关文章

PaddleOCR 高精度文字识别:丰富多样的前沿算法 | 开源日报 No.187

PaddlePaddle/PaddleOCR Stars: 34.1k License: Apache-2.0 PaddleOCR 是一个丰富、领先和实用的 OCR 工具库,旨在帮助开发者训练更好的模型并将其应用到实际场景中。该项目具有以下特点和优势: 支持多种 OCR 相关前沿算法提供产业级特色模型 PP-OCR、…

CentOS系统上安装幻兽帕鲁/Palworld服务端的详细步骤是什么?

CentOS系统上安装幻兽帕鲁/Palworld服务端的详细步骤是什么? 首先,需要确认Docker是否已经安装。如果未安装,则需要进行安装。接下来,运行Docker容器。这一步是为了创建一个可以运行幻兽帕鲁服务端的环境。然后,在容器…

顺序表基础

⽬录 1. 课前准备 2. 顺序表概念及结构 3. 顺序表分类 4. 实现动态顺序表 正⽂开始 课前预备 1. 课程⽬标 C语⾔语法基础到数据结构与算法,前⾯已经掌握并具备了扎实的C语⾔基础,为什么要学习数据结构 课程?⸺通讯录项⽬ 2. 需要…

AGI概念与实现

AGI AGI(Artificial General Intelligence),中文名为“通用人工智能”或“强人工智能”,是指通过机器学习和数据分析等技术,使计算机具有类似于人类的认知和学习能力的技术. 多模态的大模型 (Multimodal…

CSS【详解】居中对齐 (水平居中 vs 垂直居中)

水平居中 内部块级元素的宽度要小于容器(父元素) 方案一&#xff1a;文本居中对齐&#xff08;内联元素&#xff09; 限制条件&#xff1a;仅用于内联元素 display:inline 和 display: inline-block; 给容器添加样式 text-align:center<!DOCTYPE html> <html lang&q…

Linux UnixODBC安装配置

配置 UnixODBC 梦之上关注IP属地: 香港 0.2322020.12.09 13:23:10字数 1,202阅读 5,447 麒麟&达梦适配系列: 1.麒麟服务器上安装 DM8 2.配置 UnixODBC 3.beego-ORM 适配达梦 资源紧张的时候&#xff0c;服务器是大家共用的&#xff0c;上面部署了一堆服务。所以选用doc…

【系统分析师】-系统配置与性能评价

1、性能指标 主频&#xff1a;又称时钟频率&#xff0c;1GHZ表示1秒有1G个时钟周期 1s10^9ns 主频外频 * 倍频 时钟周期 主频的倒数指令周期&#xff1a;取出并执行一条指令的时间 总线周期&#xff1a;一个访存储器或IO操作所用时间平均执行周期数&#xff1a;CPI表示…

电机应用-正点原子直流有刷电机例程笔记

目录 基础驱动实验&#xff1a;调速和换向 初始化工作 电机基础驱动API 电压、电流、温度检测实验 初始化工作 采集工作 编码器测速实验 编码器接口计数原理 初始化工作 编码器测速工作 速度环控制实现 PID相关函数 PID运算 电流环控制实现 PID相关函数 PID运算…

CryoEM - CryoAI: Amortized Inference of Poses 工程源码复现

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/136384544 Paper: CryoAI: Amortized Inference of Poses for Ab Initio Reconstruction of 3D Molecular Volumes from Real Cryo-EM Images CryoAI: 基于摊…

【python】双十一美妆数据分析可视化 [聚类分析/线性回归/支持向量机](代码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

初始Tomcat(Tomcat的基础介绍)

目录 一、Tomcat的基本介绍 1、Tomcat是什么&#xff1f; 2、Tomcat的配置文件详解 3、Tomcat的构成组件 4、Tomcat的顶层架构 5、Tomcat的核心功能 6、Tomcat的请求过程 一、Tomcat的基本介绍 1、Tomcat是什么&#xff1f; Tomcat 服务器是一个免费的开放源代码的Web …

基于CVX凸优化的电动汽车充放电调度matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 CVX凸优化 4.2 电动汽车充放电调度 5.完整程序 1.程序功能描述 基于CVX凸优化的电动汽车充放电调度.仿真输出无电动汽车充电时的负载&#xff0c;电动汽车充电时cvx全局优化求解后的总…

鸿蒙开发-UI-图形-绘制自定义图形

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 鸿蒙开发-UI-组件导航-Navigation 鸿蒙开发-UI-组件导航-Tabs 鸿蒙开发-UI-图形-图片 鸿蒙开发-UI-图形-绘制几何图形 文章目录 前言 一、使用画布组件绘制自定义图形 1.初…

select,poll和epoll有什么区别

它们都是NIO中多路复用的三种实现机制&#xff0c;是由linux操作系统提供的。 用户空间和内核空间&#xff1a;操作系统为了保证系统安全&#xff0c;将内核分为两个部分&#xff0c;一个是用户空间&#xff0c;一个是内核空间。用户空间不能直接访问底层的硬件设备&#xff0…

SpringCloud-同步异步通讯比较

本文详细探讨了同步通讯和异步通讯在信息传递中的区别&#xff0c;以及它们分别带来的优势和不足。通过对支付流程的案例分析&#xff0c;突显了同步通讯可能面临的阻塞和服务依赖问题&#xff0c;而异步通讯通过引入事件驱动模式和消息代理&#xff08;Broker&#xff09;成功…

HarmonyOS-卡片事件能力说明

卡片事件能力说明 ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件&#xff0c;仅在卡片中可以调用。 接口定义&#xff1a;postCardAction(component: Object, action: Object): void 接口…

QPS 提升 10 倍!滴滴借助 StarRocks 物化视图实现低成本精确去重

作者&#xff1a;滴滴 OLAP 开发工程师 刘雨飞 小编导读&#xff1a; 滴滴于 2022 年引入了 StarRocks。经过一年多的努力&#xff0c;StarRocks 逐渐替代了原有技术栈&#xff0c;成为滴滴内部主要的 OLAP 引擎。截至 2023 年 12 月&#xff0c;滴滴已经成功建立了超过 40 个 …

STM32------分析GPIO寄存器

一、初始LED原理图 共阴极led LED发光二极管&#xff0c;需要有电流通过才能点亮&#xff0c;当有电压差就会产生电流 二极管两端的电压差超过2.7v就会有电流通过 电阻的作用 由于公式IV/R 不加电阻容易造成瞬间电流无穷大 发光二极管工作电流为10-20MA 3.3v / 1kΩ 3.…

MariaDB MaxScale实现mysql8读写分离

目录 1.MaxScale 是干什么的&#xff1f; 2.MaxScale 实验环境 3.实现数据库主从复制 4.创建用户 1) 创建监控用户 2) 创建路由用户 5.docker 安装MaxScale 6.配置maxscale 使用 maxctrl list servers 命令查看运行状态 查看注册服务 使用 maxctrl list listeners Read-…

Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析

3.2 自动配置 我们讲解了SpringBoot当中起步依赖的原理&#xff0c;就是Maven的依赖传递。接下来我们解析下自动配置的原理&#xff0c;我们要分析自动配置的原理&#xff0c;首先要知道什么是自动配置。 3.2.1 概述 SpringBoot的自动配置就是当Spring容器启动后&#xff0c…