java 正则表达式介绍

        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.hqwc.cn/news/503409.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分类问题经典算法 | 多分类问题 | Softmax回归:梯度下降

目录 一. 多分类问题解决策略1. 一对一策略 OVO (One-vs-One)2. 一对剩余策略 OVR(One-vs-Rest) 二. Softmax回归算法 【前景回顾】 这里我们先来总结Logistic回归算法: 模型函数 p s i g m o i d ( w x b ) p sigmoid(wxb) psigmoid(wx…

springcloud:3.3测试重试机制

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用:http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http:/…

MySQL篇—执行计划介绍(第二篇,总共三篇)

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…

day07_分类管理EasyExcel品牌管理

文章目录 1 分类管理1.1 菜单添加1.2 表结构介绍1.3 页面制作1.4 列表查询1.4.1 需求分析1.4.2 后端接口CategoryCategoryControllerCategoryServiceCategoryMapperCategoryMapper.xml 1.4.3 前端对接category.jscategory.vue 2 EasyExcel2.1 数据导入导出意义2.2 EasyExcel简介…

MYSQL--JDBC优化

一.JDBC优化: 优化前提: 有时候我们并不清楚某些表当中一共有多少列,以及这些列的数据类型,这个时候我们就需要提前通过一些方法提前了解到这些数据,从而更好的进行输出 具体语句: package cn.jdbc;import java.sql.*;public class JDBCDEmo1 {public static void main(String…

MariaDB MaxScale实现mysql8读写分离

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

重拾前端基础知识:CSS

重拾前端基础知识:CSS 前言选择器简单选择器属性选择器组合选择器 插入CSS内嵌样式(Inline Style)内部样式(Internal Style)外部样式(External Style) 层叠颜色背景颜色文本颜色RGB 颜色HEX 颜色…

STM32利用标准库编写程序proteus仿真流水灯

首先就是建立一个proteus工程,导入元器件画图: 接下来就是下载我已经都复制好的工程,下载后直接解压缩就能用: 链接:https://pan.baidu.com/s/1Nx5p3Tif6eHBIVkcPfsj9w?pwd1234 提取码:1234 解压后打开…

<网络安全>《61 微课堂<第1课 南北向流量是什么?>》

1 形象化解释 在网络安全中,经常听到南北向流量这个词。那究竟是什么意思呢? 这里的南北,就是地图上的东西南北,是方向。我们在画网络架构图时,往往是由上到下依次是web层、应用层、数据层,流量从web层到…

【数据分享】2000~2023年MOD15A2H 061 光合有效辐射分数FPAR数据集

​各位同学们好,今天和大伙儿分享的是2000~2023年MOD15A2H 061 光合有效辐射分数FPAR数据集。如果大家有下载处理数据等方面的问题,可以评论或私信。 Myneni, R., Y. Knyazikhin, T. Park. MODIS/Terra Leaf Area Index/FPAR 8-Day L4 Global 500m SIN G…

C#高级:DataGridView的详解

一、每条数据增加一个按钮&#xff0c;点击输出对应实体 请先确保正确添加实体的名称和文本&#xff1a; private void button6_Click(object sender, EventArgs e) {//SQL查询到数据&#xff0c;存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…

【STM32】江科大STM32学习笔记汇总(50)

00. 目录 文章目录 00. 目录01. STM32学习笔记汇总02. 相关资料下载03. 附录 01. STM32学习笔记汇总 【STM32】STM32学习笔记-课程简介(01) 【STM32】STM32学习笔记-STM32简介(02) 【STM32】STM32学习笔记-软件安装(03) 【STM32】STM32学习笔记-新建工程(04) 【STM32】STM…