java正则表达式教程

什么是正则表达式:

正则表达式是一种用来描述字符串模式的语法。在 Java 中,正则表达式通常是一个字符串,它由普通字符(例如字母、数字、标点符号等)和特殊字符(称为元字符)组成。这些特殊字符可以表示一些模式,例如匹配数字、字母、空格等。

正则表达式的作用:

正则表达式在 Java 中被广泛应用于字符串处理中,主要用于以下几个方面:

  1. 查找匹配的文本:可以使用正则表达式在文本中查找特定的模式或子字符串。

  2. 验证输入的格式:可以使用正则表达式验证输入字符串是否符合特定的格式,例如电子邮件地址、手机号码等。

  3. 替换匹配的文本:可以使用正则表达式替换文本中匹配的部分为指定的字符串。

  4. 分割字符串:可以使用正则表达式将字符串分割成多个部分,例如根据逗号、空格等字符进行分割。

 正则表达式的优缺点:

优点:
  1. 灵活性:正则表达式提供了一种灵活的方式来描述字符串模式,可以精确地匹配各种复杂的模式,从而实现灵活的文本处理和匹配需求。

  2. 强大的模式匹配能力:正则表达式支持各种模式匹配操作,包括查找、替换、验证等,可以满足各种文本处理需求。

  3. 广泛应用:正则表达式在各种编程语言和平台上都得到广泛支持和应用,是一种通用的文本处理工具。

  4. 表达能力强:正则表达式可以使用各种元字符和特殊语法来表达复杂的字符串模式,具有很强的表达能力。

缺点:
  1. 复杂性:正则表达式的语法相对复杂,学习曲线较陡,对于初学者来说可能需要一些时间和练习才能掌握。

  2. 可读性差:由于正则表达式的语法较为紧凑和晦涩,编写和阅读正则表达式可能比较困难,尤其是对于复杂的正则表达式。

  3. 性能:对于复杂的正则表达式模式和大量的文本数据,正则表达式的性能可能不如手动编写的字符串处理代码,可能会导致性能问题。

  4. 维护困难:一些复杂的正则表达式可能会变得难以理解和维护,特别是当需要修改或扩展现有的正则表达式时。

组件:

1. 基本匹配
  • 字面字符:直接匹配字符串中的特定字符。例如,cat 会匹配 "cat"。
  • 元字符:拥有特殊意义的字符,用于构建强大的匹配模式,如 .^$*+?|()[]{} 等。

 

正则表达式是一种强大的文本处理工具,用于搜索、匹配和操作字符串。它们基于一套规则来识别字符串中的特定模式。正则表达式广泛应用于编程、数据分析、文本处理等领域。以下是正则表达式的一些基本概念和组件:

2. 特殊字符类
  • .:匹配除换行符外的任意单个字符。
  • \d\w\s:分别匹配任意数字、任意字母或数字(包括下划线),以及任意空白字符(如空格、制表符)。
  • \D\W\S:匹配任意非数字、非单词字符、非空白字符。
3. 字符集
  • [abc]:匹配任何一个列在方括号中的字符(如 'a'、'b' 或 'c')。
  • [^abc]:匹配任何不在方括号中的字符。
4. 边界匹配
  • ^:匹配行的开头。
  • $:匹配行的结尾。
  • \b:匹配单词边界,即单词和空格之间的位置。
  • \B:匹配非单词边界的位置。
5. 量词
  • *:匹配前面的元素零次或多次。
  • +:匹配前面的元素一次或多次。
  • ?:匹配前面的元素零次或一次。
  • {n}:匹配前面的元素恰好 n 次。
  • {n,}:匹配前面的元素至少 n 次。
  • {n,m}:匹配前面的元素至少 n 次,但不超过 m 次。
6. 分组和捕获
  • (xyz):将 'xyz' 视为一个单一的单位,并捕获这部分匹配的文本。这些捕获可以用于后续的操作和引用。
7. 或运算
  • |:匹配两个或多个分支选择,例如 cat|dog 表示匹配 "cat" 或 "dog"。
8. 转义字符
  • \:用于转义特殊字符,使其被解释为字面值,如 \. 就是匹配点号本身,而不是任意字符的元字符。

 

Pattern 类和 Matcher 类:

Java 中的正则表达式通常使用 java.util.regex 包中的类来进行处理,主要包括 Pattern 类和 Matcher 类。Pattern 类表示编译后的正则表达式模式,而 Matcher 类用于执行匹配操作。

Pattern 类

Pattern 类用于表示编译后的正则表达式模式。它提供了一系列静态方法来编译和获取正则表达式模式。主要方法包括:

  1. compile(String regex):

    • 静态方法,用于将给定的正则表达式字符串编译为 Pattern 对象。
    • 返回一个 Pattern 对象,表示编译后的正则表达式模式。
  2. matcher(CharSequence input):

    • 方法用于创建一个 Matcher 对象,用于在给定的输入字符序列中执行匹配操作。
    • 接受一个 CharSequence 参数,可以是 StringStringBuilder 等字符序列。
  3. split(CharSequence input):

    • 方法用于根据正则表达式模式将输入字符序列分割成多个部分。
    • 返回一个 String[] 数组,包含分割后的子字符串。
Matcher 类

Matcher 类是用于执行匹配操作的对象。它提供了一系列方法来执行查找、替换等操作。主要方法包括:

  1. matches():

    • 方法用于尝试将整个输入字符序列与正则表达式模式进行匹配。
    • 返回一个布尔值,表示是否整个输入字符序列与模式匹配。
  2. find():

    • 方法用于在输入字符序列中查找下一个匹配项。
    • 返回 true 表示找到了匹配项,否则返回 false
  3. start() 和 end():

    • start() 方法返回当前匹配的子字符串在原始输入字符序列中的起始位置(包含)。
    • end() 方法返回当前匹配的子字符串在原始输入字符序列中的结束位置(不包含)。
  4. group():

    • 方法用于返回当前匹配的子字符串。
    • 如果在调用 find() 方法之后调用 group() 方法,则返回当前匹配的子字符串。
    • 如果在调用 matches() 方法之后调用 group() 方法,则返回整个输入字符序列。

代码实例: 

1. 验证邮箱地址是否有效
import java.util.regex.*;public class Main {public static void main(String[] args) {String email = "example@example.com";String regex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";boolean isValid = email.matches(regex);if (isValid) {System.out.println("Valid email address");} else {System.out.println("Invalid email address");}}
}
2. 提取文本中的所有链接
import java.util.regex.*;
import java.util.*;public class Main {public static void main(String[] args) {String text = "Visit my website at https://example.com and my blog at http://blog.example.com";String regex = "https?://\\S+";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);List<String> links = new ArrayList<>();while (matcher.find()) {links.add(matcher.group());}System.out.println("Links found:");for (String link : links) {System.out.println(link);}}
}
3. 替换字符串中的所有数字
public class Main {public static void main(String[] args) {String text = "Today is 2024-04-16";String replacedText = text.replaceAll("\\d", "*");System.out.println(replacedText); // 输出:Today is ****-**-**}
}

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

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

相关文章

酷开科技将幸福放大,第一届酷开大使启程!

注意了&#xff01;第一届酷开大使来了&#xff01;无论年龄、性别、职业、地域……从来自五湖四海的近千名酷粉中&#xff0c;经过了层层筛选之后&#xff0c;终于迎来了65位第一届酷开大使&#xff01; 他们来自我国54个不同的城市&#xff0c;他们中有能人巧匠&#xff0c;…

Spring基础篇-快速面试笔记(速成版)

文章目录 1. Spring概述2. 控制反转&#xff08;IoC&#xff09;2.1 Spring声明Bean对象的方式2.2 Spring的Bean容器&#xff1a;BeanFactory2.3 Spring的Bean生命周期2.4 Spring的Bean的注入方式 3. Spring的事件监听器&#xff08;Event Listener&#xff09;3.1 Spring内置事…

【机器学习300问】71、神经网络中前向传播和反向传播是什么?

我之前写了一篇有关计算图如何帮助人们理解反向传播的文章&#xff0c;那为什么我还要写这篇文章呢&#xff1f;是因为我又学习了一个新的方法来可视化前向传播和反向传播&#xff0c;我想把两种方法总结在一起&#xff0c;方便我自己后续的复习。对了顺便附上往期文章的链接方…

Windows下IntelliJ IDEA远程连接服务器中Hadoop运行WordCount(详细版)

使用IDEA直接运行Hadoop项目&#xff0c;有两种方式&#xff0c;分别是本地式&#xff1a;本地安装HadoopIDEA&#xff1b;远程式&#xff1a;远程部署Hadoop&#xff0c;本地安装IDEA并连接&#xff0c; 本文介绍第二种。 一、安装配置Hadoop (1)虚拟机伪分布式 见上才艺&a…

SpringBoot相关知识点总结

1 SpringBoot的目的 简化开发&#xff0c;开箱即用。 2 Spring Boot Starter Spring Boot Starter 是 Spring Boot 中的一个重要概念&#xff0c;它是一种提供依赖项的方式&#xff0c;可以帮助开发人员快速集成各种第三方库和框架。Spring Boot Starter 的目的是简化 Sprin…

Linux中docker安装

准备工作 系统要求 Docker 支持 64 位版本 CentOS 7/8&#xff0c;并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求&#xff0c;但由于内核版本比较低&#xff0c;部分功能&#xff08;如 overlay2 存储层驱动&#xff09;无法使用&#xff0c;并且部分功能可能不…

计算机网络(六)应用层

应用层 基本概念 服务器端&#xff08;Server&#xff09;&#xff1a; 服务器是网络中提供服务的计算机或软件程序。服务器通常具有更高的性能、更大的存储空间和更高的带宽&#xff0c;用于提供各种服务&#xff0c;如文件存储、数据库管理、Web托管、电子邮件传递等。服务…

MongoDB的安装配置及使用

文章目录 前言一、MongoDB的下载、安装、配置二、检验MongoDB是否安装成功三、Navicat 操作MongoDB四、创建一个集合&#xff0c;存放三个文档总结 前言 本文内容&#xff1a; &#x1f4ab; MongoDB的下载、安装、配置 &#x1f4ab; 检验MongoDB是否安装成功 ❤️ Navicat 操…

对桥接模式的理解

目录 一、背景二、桥接模式的demo1、类型A&#xff08;形状类型&#xff09;2、类型B&#xff08;颜色类型&#xff09;3、需求&#xff1a;类型A要使用类型B&#xff08;如&#xff1a;红色的方形&#xff09;4、Spring的方式 一、背景 在《对装饰器模式的理解》中&#xff0…

理想低通滤波器

理想低通滤波器&#xff0c;振铃现象是因为sinc函数&#xff0c;而sinc函数是因为例4.1的简单函数的傅里叶变换得到的。经过我的计算&#xff0c;简单函数的傅里叶反变换也得到sinc函数。这里的频率域滤波器因为是二个值的&#xff0c;所以类似简单函数&#xff0c;反变换之后得…

从C++ 14到C++ 17:理解聚合初始化是如何工作的

C 17中的扩展聚合初始化 一、引言二、C 14中的代码三、C 17中的代码四、扩展聚合初始化五、为什么代码停止编译&#xff1f;六、总结 一、引言 将编译器升级到C 17&#xff0c;某些看起来合理的代码停止了编译。这段代码没有使用任何在C 17中删除的过时特性&#xff0c;如std:…

03.卸载MySQL

卸载MySQL 1.Windows卸载MySQL8 停止服务 用命令停止或者在服务中停止都可以 net stop mysql&#xff08;服务名字可以去服务里面看一下&#xff09;控制面板卸载MySQL 卸载MySQL8.0的程序可以和其他桌面应用程序一样直接在控制面板选择卸载程序&#xff0c;并在程序列表中…

OpenHarmony、HarmonyOS和Harmony NEXT 《我们不一样》

1. OpenHarmony 定义与地位&#xff1a;OpenHarmony是鸿蒙系统的底层内核系统&#xff0c;集成了Linux内核和LiteOS&#xff0c;为各种设备提供统一的操作系统解决方案。 开源与商用&#xff1a;OpenHarmony是一个开源项目&#xff0c;允许开发者自由访问和使用其源代码&#…

基于afx透明视频的视觉增强前端方案

作者 | 青玉 导读 本文介绍了增长前端团队自研的Webview框架下透明视频视觉增强方案&#xff0c;该方案在保证对视觉进行高度还原的同时可投入更少的开发成本&#xff0c;还能获得更优的前端性能表现。文章首先分析了市面上动画方案的优缺点&#xff0c;然后详细介绍了透明视频…

计算机视觉——OpenCV Python基于颜色识别的目标检测

1. 计算机视觉中的颜色空间 颜色空间在计算机视觉领域的应用非常广泛&#xff0c;它们在图像和视频处理、物体检测等任务中扮演着重要角色。颜色空间的主要作用是将颜色以数值形式表示出来&#xff0c;这样计算机算法就能够对其进行处理和分析。不同的颜色空间有着不同的特点和…

agi入门-大模型开发基础

AGI(Artifical General Inteligence)的到来还有多久&#xff1f; 乐观预测&#xff1a;明年主流预测&#xff1a;3-5年悲观预测&#xff1a;10年 AGI时代&#xff0c;AI无处不在&#xff0c;相关从来者将如何分&#xff1f; AI使用者&#xff1a;使用别人开发的AI产品AI产品…

中国人工智能产业年会智能交通与自动驾驶专题全景扫描

中国人工智能产业年会&#xff08;CAIIAC&#xff09;是中国人工智能技术发展和应用的重要展示平台&#xff0c;不仅关注创新&#xff0c;还涵盖了市场和监管方面的内容&#xff0c;对于促进人工智能领域的发展起到了重要作用。年会汇集了来自学术界、工业界和政府的专家&#…

【二分查找】Leetcode 74. 搜索二维矩阵【中等】

搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c…

【InternLM 实战营第二期笔记】LMDeploy 量化部署 LLMVLM实战

Huggingface与TurboMind介绍 Huggingface HuggingFace是一个高速发展的社区&#xff0c;包括Meta、Google、Microsoft、Amazon在内的超过5000家组织机构在为HuggingFace开源社区贡献代码、数据集和模型。可以认为是一个针对深度学习模型和数据集的在线托管社区&#xff0c;如…

4.Labview簇、变体与类(上)

在Labview中&#xff0c;何为簇与变体&#xff0c;何为类&#xff1f;应该如何理解&#xff1f;具体有什么应用场景&#xff1f; 本文基于Labview软件&#xff0c;独到的讲解了簇与变体与类函数的使用方法和场景&#xff0c;从理论上讲解其数据流的底层概念&#xff0c;从实践上…