首页 > 编程语言 >Java正则表达式

Java正则表达式

时间:2024-06-23 09:21:47浏览次数:28  
标签:字符 匹配 正则表达式 matcher Pattern 字符串 Java

Java正则表达式

1.正则表达式是什么?

正则表达式是用于匹配和操作文本模式的工具。它由字符和特殊元字符组成,能够实现强大的文本搜索、验证、替换等功能。

2.正则表达式基本语法

(1)匹配普通字符

  • 匹配数字 [0123456789]简写为[0-9]
  • 匹配小写字母[a-z]
  • 匹配大写字母[A-Z]
  • 匹配大小写字母[a-zA-Z]或[A-Za-z]

正则表达式中ascii码表对应的较小的值放在前面,大的值放在后面

(2)元字符

元字符 说明
. 匹配除换行符以外的任意字符
\ 转义字符,可以解除特殊字符的特殊功能
^ 匹配字符串开始的位置
$ 匹配字符串结束的位置
* 匹配前面的字符0次或多次
+ 匹配前面的字符1次或多次
? 匹配前面的字符0次或1次
{n}
匹配前面的字符n次
{n,}
匹配前面的字符至少n次
{n,m}
匹配前面的字符至少n次,至多m次
x|y 匹配x或y
[xyz] 匹配xyz任意的一个字符
[^xyz] 不匹配xyz中的字符
[^m-z] 匹配未在指定范围m到z中的任何字符
\A 只匹配字符串的开头
\B 匹配非单词的边界
\b 匹配某个单词的边界
\D 匹配非数字字符
\d 匹配数字字符
\f 匹配换页字符
\n 匹配换行符
\r 匹配回车符
\S 匹配任何非空白字符
\s 匹配任何空白字符,包括空格、制表符等
\W 匹配任何非单词字符
\w 匹配任何单词字符,包括数字和下划线
\Z 只匹配字符串的结尾或结尾的换行符之前
\z 只匹配字符串的结尾

(3)举例

比如我们要写一个表达式表达ipv4地址

那么正则表达式可以写为:

^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))$

  • ^ 表示匹配字符串的开始位置。
  • (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) 这部分用于匹配 0 到 255 之间的数字。
  • \.表示匹配‘.’
  • {3}表示匹配3次
  • ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)) 匹配最后一个数字段。因为最后一段的结尾没有‘.’所以单独提出来
  • $ 表示匹配字符串的结尾。

(4)惰性匹配 & 贪婪匹配

惰性匹配:惰性匹配会尽量匹配少的字符(.*?)

贪婪匹配:贪婪匹配会尽量匹配多的字符(.*)

举个例子

这里有一个字符串"Hello World"

我们要匹配以H开头,o结尾的字符串,那么
这里有两个o,那么匹配结果是什么样的呢?

  • 惰性匹配的表达式H.*?o,因为受到?的限制,所以匹配结果为Hello
  • 贪婪匹配的表达式H.*o,此时没有?的限制,会尽可能的匹配,所以匹配结果为Hello Wo

3.Java使用正则表达式

(1)Pattern对象

compile 函数用于将正则表达式的模式字符串编译成一个 Pattern 对象

Pattern 对象 代表了一个已编译的正则表达式模式,用于创建 Matcher 对象来执行具体的匹配操作。

String regex = "正则表达式";
Pattern pattern = Pattern.compile(regex);

(2)Matcher对象

Matcher matcher = pattern.matcher("要匹配的字符串");

matcher.find() //返回布尔值,检验字符串是否存在符合正则表达式的部分,若有则返回true
matcher.matches() //返回布尔值,检验字符串是否符合正则表达式,若符合返回true
matcher.group() //返回字符串,group(0)表示匹配的整个字符串,group(1),表示匹配的第一个括号的内容

while (matcher.find()) {
    matcher.appendReplacement(sb, "XXX");//将匹配到的部分换为xxx,并将结果添加到StringBuffer对象
}
matcher.appendTail(sb);

标签:字符,匹配,正则表达式,matcher,Pattern,字符串,Java
From: https://www.cnblogs.com/hanstary/p/18263076

相关文章

  • 9.2JavaEE——JDBCTemplate的常用方法(一)excute()方法
    execute()方法用于执行SQL语句,其语法格式如下:jdTemplate.execute("SQL语句");下面以创建数据表的SQL语句为例,来演示excute()方法的使用,具体步骤如下。1、创建数据库        在MySQL中,创建一个名为spring的数据库。 mysql>createdatabasespring;QueryOK,1......
  • 手把手教你java CPU飙升300%如何优化
    背景今天有个项目运行一段时间后,cpu老是不堪负载。排查top命令TOP命令topt按cpu排序topm按内存使用率排序从上面看很快看出是pid4338这个进程资源消耗很高。top-Hppidtop-Hp4338找到对应线程消耗的资源shft+pcpu占用进行排序,shift+m按照内存排......
  • Java 超详细实现导入导出 (包含时间转换问题和样式)
    序言工作中遇到了导入导出问题,并且出现了导入或导出Excel时间格式变为数字的问题。通过学习解决实现了这些功能,记录总结分享给大家。本文将详细介绍如何使用Java编程语言和ApachePOI库来实现这些功能。我们将通过一个示例项目演示如何从数据库中读取数据并将其导出为Ex......
  • LangChain4j LangChain集成Java
    LangChain4j介绍github地址https://github.com/langchain4j快速开始引入依赖<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>0.31.0</version></dependency&g......
  • Java解析微信获取手机号信息
    在微信中,用户手机号的获取通常是通过微信小程序的getPhoneNumber接口来实现的。这个接口允许用户在授权后,将加密的手机号数据传递给开发者。由于隐私保护,微信不会直接提供用户的明文手机号,而是提供一个加密的手机号字符串和相应的解密密钥。以下是一个基于Java的示例,展示了如何接......
  • Java高手的30k之路|面试宝典|精通JVM(二)
    JVM基本结构类加载子系统:负责将.class文件加载到内存中,并进行验证、准备、解析和初始化。运行时数据区:包括堆(Heap)、方法区(MethodArea)、Java栈(JavaStack)、本地方法栈(NativeMethodStack)和程序计数器(ProgramCounterRegister)。执行引擎:包括解释器(Interpreter)、即时编译器......
  • Java脚本实现在微信聊天框发消息
    最近,有读者问Java脚本如何实现在微信聊天框发消息。首先,需要明确一点:由于微信的安全限制和封闭性,直接使用Java(或任何其他外部编程语言)来控制在微信聊天框中发送消息是不可行的。微信没有提供公开的API来允许外部程序直接与其交互。但是,如果我们的目标是创建一个可以与微信集成的......
  • Java高手的30k之路|面试宝典|精通网络编程
    基础概念OSI和TCP/IP在高级Java开发面试中,关于OSI模型和TCP/IP模型的理解是非常重要的。以下是这两个网络模型及其各层功能的详细解释:OSI模型OSI(OpenSystemsInterconnection)模型是一个概念性框架,用于理解和设计网络通信的不同层次。它分为七层,每层都有特定的功能。......
  • Java脚本实现在微信聊天框发消息
    最近,有读者问Java脚本如何实现在微信聊天框发消息。首先,需要明确一点:由于微信的安全限制和封闭性,直接使用Java(或任何其他外部编程语言)来控制在微信聊天框中发送消息是不可行的。微信没有提供公开的API来允许外部程序直接与其交互。但是,如果我们的目标是创建一个可以与微信集成......
  • 一、若依--P2--P5【黑马程序员Java最新AI+若依框架项目开发新方案视频教程,基于RuoYi-V
    学习视频【黑马程序员Java最新AI+若依框架项目开发新方案视频教程,基于RuoYi-Vue3前后端分离版本,从前端到后端再到AI智能化应用全通关】https://www.bilibili.com/video/BV1pf421B71v/?p=6&share_source=copy_web&vd_source=3949d51b57b2891ea14d6e51c792bef6P2:前端框架搭......