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.rhkb.cn/news/269595.html

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

相关文章

[HackMyVM] 靶场 Wave

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

2024最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况,在这过程中要展现出自信,对工作有激情,上进,好学) 面试官您好,我叫###,今年26岁,来自江西九江,就读专业是电子商务,毕…

平衡搜索二叉树—AVL树

一、定义: 为了避免搜索二叉树的高度增长过快,降低二叉树的性能,规定在插入和删除二叉树的结点的时候,任何结点左右子树的高度差绝对值不超过1,这样的二叉树被称为平衡二叉树(balanced Binary Tree&#xf…

Java并发编程-进程和线程

一、进程和线程 1. 进程 什么是进程? 简单来说,进程就是程序的一次启动和执行。进程是操作系统中的一个概念,它代表正在运行的程序的实例。每个进程都有自己的内存空间、代码和数据,以及其他操作系统资源,如文件和设备…

Python:关于数据服务中的Web API的设计

搭建类似joinquant、tushare类似的私有数据服务应用,有以下一些点需要注意: 需要说明的是,这里讨论的是web api前后端,当然还有其它方案,thrift,grpc等。因为要考虑到一鱼两吃,本文只探讨web ap…

FreeRTOS学习笔记-基于stm32f103(1)基础知识

一、裸机与RTOS 我们使用的32板子是裸机,又称前后台系统。裸机有如下缺点: 1、实时性差。只能一步一步执行任务,比如在一个while循环中,要想执行上一个任务,就必须把下面的任务执行完,循环一遍后才能执行…

服务器后端是学习java还是php

没有绝对的"最好"语言,每种后端语言都有其适用的场景和特点。以下是几种常用的后端语言: 1. Java:Java是一种通用且强大的语言,广泛用于企业级应用和大型系统。它有很好的性能和可靠性,并且具有优秀的生态系…

C++面试干货---带你梳理常考的面试题(二)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 1.struct 和 class 区别 1.默认访问权限:struct中的成员默认为public,而class中的成员默认为priv…

Python打发无聊时光:13.用pywin32库制作电脑本地快捷应用

第一步:新建一个simple_app.py 装pywin32库 pip install pywin32 新建一个simple_app.py,复制下面代码,或者可以自己设计内容 import tkinter as tkclass AnimatedGUI:def __init__(self, root):self.root rootself.root.title("玩…

初学arp欺骗

首先准备一台靶机这里用虚拟机的win10 已知网关与ip地址(怕误伤) 现在返回kali从头开始 首先探测自己的网关 然后扫内网存活的ip 发现有3台 用nmap扫一下是哪几台 成功发现我们虚拟机的ip 现在虚拟机可以正常访问网络 接下来直接开梭 ip网关 返回虚拟机…

day03_登录注销(前端接入登录,异常处理, 图片验证码,获取用户信息接口,退出功能)

文章目录 1. 前端接入登录1.1 修改前端代码1.2 跨域请求1.2.1 跨域请求简介1.2.2 COSR概述CORS简介CORS原理 1.2.3 CORS解决跨域 2. 异常处理2.1 提示空消息分析2.2 系统异常分类2.3 异常处理2.2.1 方案一2.2.2 方案二 3. 图片验证码3.1 图片验证码意义3.2 实现思路3.3 后端接口…

【学习心得】响应数据加密的原理与逆向思路

一、什么是响应数据加密? 响应数据加密是常见的反爬手段的一种,它是指服务器返回的不是明文数据,而是加密后的数据。这种密文数据可以被JS解密进而渲染在浏览器中让人们看到。 它的原理和过程图如下: 二、响应数据加密的逆向思路 …

docker中hyperf项目配置虚拟域名

在学习hyperf框架时遇到一些问题,这里是直接用了docker环境 下载镜像运行容器 docker run --name hyperf -v /data/project:/data/project -p 9501:9501 -itd -w /data/project --privileged -u root --entrypoint /bin/sh 镜像ID配置docker-compose.yml version…

[译]BNF 表示法:深入了解 Python 的语法

[译]BNF 表示法:深入了解 Python 的语法 原文:《BNF Notation: Dive Deeper Into Python’s Grammar》 https://realpython.com/python-bnf-notation/ 在阅读Python文档的时候,你可能已经遇到过BNF(Backus–Naur form)表示法: 下…

2024年2月24日~2024年3月1日周报(调整网络结构)

文章目录 一、前言二、实验情况2.1 结果展示2.2 灵感收集 三、小结 一、前言 上周学习了数学表达式、了解了DDNet的网络框架。   在本周,寻找改进网络框架与超参数的灵感,并跑代码查看效果。另外,完成了毕业设计开题报告任务。 二、实验情…

web游戏-飞机大战

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html> <html lang=&q…

YOLOv6、YOLOv7、YOLOv8网络结构图(清晰版)

承接上一篇博客&#xff1a;YOLOv3、YOLOv4、YOLOv5、YOLOx的网络结构图(清晰版)_yolox网络结构图-CSDN博客 1. YOLOv6网络结构图 2. YOLOv7网络结构图 3. YOLOv8网络结构图

O2O:Offline–Online Actor–Critic

IEEE TAI 2024 paper 1 Introduction 一篇offline to online 的文章&#xff0c;有效解决迁移过程出现的performance drop。所提出的O2AC算法首先在离线阶段添加一项BC惩罚项&#xff0c;用于限制策略靠近专家策略&#xff1b;而在在线微调阶段&#xff0c;通过动态调整BC的权…

手写分布式配置中心(二)实现分布式配置中心的简单版本

这一篇文章比较简单&#xff0c;就是一个增删改查的服务端和一个获取配置的客户端&#xff0c;旨在搭建一个简单的配置中心架构&#xff0c;代码在 https://gitee.com/summer-cat001/config-center 服务端 服务端选择用springboot 2.7.14搭建&#xff0c;设计了4个接口/confi…

物联网主机:为智能交通赋能

物联网&#xff08;IoT&#xff09;技术的发展为智能交通领域带来了许多创新的解决方案。而在物联网应用中&#xff0c;物联网主机起着关键的作用。本文将为大家介绍一款名为E6000的物联网主机&#xff0c;它是一种多协议、多接口的物联网主机&#xff0c;为智能交通系统的建设…