当前位置: 首页 > article >正文

掌握正则表达式_模式匹配的艺术

当然,以下是《掌握正则表达式:模式匹配的艺术》文章内容,使用 Java 正则表达式,并包含丰富的代码示例:

1. 引言

1.1 正则表达式的定义与历史

正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述文本模式的强大工具。它最初由数学家 Stephen Kleene 在 20 世纪 50 年代提出,后来被广泛应用于计算机科学领域,尤其是在文本处理和模式匹配中。

1.2 学习正则表达式的重要性

正则表达式在各种编程语言和工具中都有广泛应用,如文本编辑器、命令行工具、数据库查询、Web 开发等。掌握正则表达式可以帮助你更高效地处理文本数据,编写简洁且功能强大的代码。

2. 基础概念

2.1 正则表达式的语法元素

字符类

字符类用于匹配特定类型的字符。常见的字符类包括:

  • .:匹配任意单个字符(除换行符外)
  • \d:匹配数字 [0-9]
  • \w:匹配字母、数字和下划线 [a-zA-Z0-9_]
  • \s:匹配空白字符(空格、制表符、换行符等)

量词

量词用于指定前面的字符或组出现的次数:

  • *:匹配前面的字符零次或多次
  • +:匹配前面的字符一次或多次
  • ?:匹配前面的字符零次或一次
  • {n}:匹配前面的字符恰好 n 次
  • {n,}:匹配前面的字符至少 n 次
  • {n,m}:匹配前面的字符至少 n 次,最多 m 次

锚点

锚点用于指定匹配的位置:

  • ^:匹配字符串的开头
  • $:匹配字符串的结尾

分组与捕获

分组用于将多个字符组合在一起,捕获用于提取匹配的部分:

  • ():分组并捕获匹配的内容
  • (?:):非捕获分组,只分组不捕获

2.2 常见元字符及其作用

元字符是具有特殊含义的字符,如 .*+ 等。它们可以用来构建复杂的匹配规则。例如,.* 表示匹配任意数量的任意字符。

3. 构建简单的正则表达式

匹配固定字符串

要匹配一个固定的字符串,可以直接使用该字符串本身作为正则表达式。例如,hello 匹配字符串 “hello”。

代码示例

import java.util.regex.*;public class FixedStringExample {public static void main(String[] args) {String text = "hello world";String regex = "hello";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);if (matcher.find()) {System.out.println("Match found: " + matcher.group());} else {System.out.println("No match found.");}}
}

使用字符类进行匹配

字符类可以让你匹配一组字符中的任意一个。例如,[aeiou] 匹配任意一个元音字母。

代码示例

import java.util.regex.*;public class CharacterClassExample {public static void main(String[] args) {String text = "hello world";String regex = "[aeiou]";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);while (matcher.find()) {System.out.println("Vowel found: " + matcher.group());}}
}

利用量词简化表达式

量词可以简化重复字符的匹配。例如,\d{3}-\d{2}-\d{4} 可以匹配美国的社会安全号码格式(如 123-45-6789)。

代码示例

import java.util.regex.*;public class QuantifierExample {public static void main(String[] args) {String text = "123-45-6789"

相关文章:

掌握正则表达式_模式匹配的艺术

当然,以下是《掌握正则表达式:模式匹配的艺术》文章内容,使用 Java 正则表达式,并包含丰富的代码示例: 1. 引言 1.1 正则表达式的定义与历史 正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述文本模式的强大工具。它最初由数学家 Stephen Kleene…...

Python使用OpenCV图片去水印多种方案实现

1. 前言 本文为作者学习记录,使用Python结合OpenCV,总结了几种常见的水印去除方式,简单图片去水印效果良好,但是复杂图片有点一言难尽,本文部分代码仅供参考,并不能针对所有水印通用,需要根据具…...

论文阅读2——S波段宽波束圆极化天线设计

论文结构 研究背景,基于当前天线通信的应用基础进行分析,为了适应更多的应用环境和更复杂的通信信号提出宽波束圆极化的天线设计要求,圆极化天线可以接收到任意极化的电磁波且其辐射波也可以由其他任意极化天线接收到圆极化天线的特性&#…...

【java】基本数据类型和引用数据类型

在 Java 中,数据类型分为 基本数据类型 和 引用数据类型。它们的本质区别在于存储方式和操作方式。下面我会详细解释这两种数据类型,并用通俗易懂的语言帮助你理解。 1. 基本数据类型(Primitive Data Types) 基本数据类型是 Java…...

基于角色访问控制的UML 表示02

一个用户可以成为很多角色的成员,一个角色可以有许多用户。类似地,一个角色可以有多个权限,同一个权限可以被指派给多个角色。每个会话把一个用户和可能的许多角色联系起来。一个用户在激发他或她所属角色的某些子集时,建立了一个…...

CEF132 编译指南 Linux 篇 - 获取 CEF 源代码:源码同步详解(五)

1. 引言 在完成所有必要工具的安装和配置之后,我们来到了整个 CEF 编译流程中至关重要的环节:获取 CEF 源代码。CEF 源码的获取过程需要我们特别关注同步策略和版本管理,以确保获取的代码版本正确且完整。本篇将详细指导你在 Linux 系统上获…...

Golang关于结构体组合赋值的问题

现在有一个结构体,其中一个属性组合了另外一个结构体,如下所示: type User struct {Id int64Name stringAge int64UserInfo }type UserInfo struct {Phone stringAddress string }如果要给 User 结构体的 Phone 和 Address 赋值的话&am…...

django上传文件

1、settings.py配置 # 静态文件配置 STATIC_URL /static/ STATICFILES_DIRS [BASE_DIR /static, ]上传文件 # 定义一个视图函数,该函数接收一个 request 参数 from django.shortcuts import render # 必备引入 import json from django.views.decorators.http i…...

Springboot核心:统一异常处理

概述 统一异常处理机制在 Spring Boot 应用中是非常重要的核心点,因为它带来了多个方面的优势,能够显著提升应用的质量和开发效率。 为什么要优雅的处理异常 在后端发生异常或者是请求出错时,前端通常直接显示异常信息,而且对于…...

【银河麒麟高级服务器操作系统】服务器卡死后恢复系统日志丢失-分析及处理全过程

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://document.kylinos.cn 服务器环境以及配置 【机型】 处理器&#xff…...

【deepseek api 第三方平台使用参考】

1.硅基流动 1.1硅基流动网页版使用 打开硅基流动的官网 https://siliconflow.cn/zh-cn/ 点右上角登陆 在模型广场这里找到这个deepseek的r1 注意,一定选择下面标记【671B】的,这个是满血版 这个满血版收费标准是 4块钱/百万token输入 16块钱/百万token…...

通过 VBA 在 Excel 中自动提取拼音首字母

在excel里面把表格里的中文提取拼音大写缩写怎么弄 在Excel中,如果你想提取表格中的中文字符并转换为拼音大写缩写(即每个汉字的拼音首字母的大写形式),可以通过以下步骤来实现。这项工作可以分为两个主要部分: 提取拼…...

动态规划dp_4

一.背包 如果求组合数就是外层for循环遍历物品,内层for遍历背包。 如果求排列数就是外层for遍历背包,内层for循环遍历物品。 二.题 1. 思路:dp五部曲,思路在注释 /* dp[i]表示:到达第 i 个台阶有dp[i]种方法 状态转…...

对贵司需求的PLC触摸的远程调试的解决方案

远程监控技术解决方案 一、需求痛点分析 全球设备运维响应滞后(平均故障处理周期>72小时)客户定制化需求频繁(每月PLC程序修改需求超50次)人力成本高企(单次跨国差旅成本约$5000)多品牌PLC兼容需求&am…...

Python用PyMC3马尔可夫链蒙特卡罗MCMC对疾病症状数据贝叶斯推断

全文链接:https://tecdat.cn/?p39937 本文聚焦于马尔可夫链蒙特卡罗(MCMC)方法在贝叶斯推断中的Python实现。通过介绍MCMC的基础原理、在贝叶斯推断中的应用步骤,展示了其在解决复杂分布采样问题上的强大能力。同时,借…...

网络工程师 (39)常见广域网技术

一、HDLC 前言 HDLC(High-level Data Link Control,高级数据链路控制)是一种面向比特的链路层协议。 (一)定义与历史背景 HDLC是由国际电信联盟(ITU)标准化的,它基于IBM公司早期的同…...

每日Attention学习23——KAN-Block

模块出处 [SPL 25] [link] [code] KAN See In the Dark 模块名称 Kolmogorov-Arnold Network Block (KAN-Block) 模块作用 用于vision的KAN结构 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional as F import mathclass Swish(nn.Module)…...

基于Python的Optimal Interpolation (OI) 方法实现

前言 Optimal Interpolation (OI) 方法概述与实现 Optimal Interpolation (OI) 是一种广泛应用于气象学、海洋学等领域的空间数据插值方法。该方法通过结合观测数据与模型预测数据,最小化误差方差,从而实现对空间数据的最优插值。以下是OI方法的一般步骤…...

学习数据结构(10)栈和队列下+二叉树(堆)上

1.关于栈和队列的算法题 (1)用队列实现栈 解法一:(参考代码) 题目要求实现六个函数,分别是栈初始化,入栈,移除并返回栈顶元素,返回栈顶元素,判空&#xff0…...

.NET版Word处理控件Aspose.Words教程:使用 C# 删除 Word 中的空白页

Word 文档中的空白页会使其看起来不专业并扰乱流程。用户会遇到需要删除 Word 中的空白页的情况,但手动删除它们需要时间和精力。在这篇博文中,我们将探讨如何使用 C# 删除 Word 中的空白页。 本文涵盖以下主题: C# 库用于删除 Word 中的空…...

《代码随想录》刷题笔记——回溯篇【java实现】

文章目录 组合组合总和 III电话号码的字母组合组合总和组合总和II思路代码实现 分割回文串※思路字符串分割回文串判断效率优化※ 复原 IP 地址优化版本 子集子集 II使用usedArr辅助去重不使用usedArr辅助去重 递增子序列※全排列全排列 II重新安排行程题意代码 N 皇后解数独直…...

【JavaEE进阶】验证码案例

目 🌲实现说明 🎄Hutool介绍 🌳准备工作 🌴约定前后端交互接口 🚩接口定义 🚩实现服务器后端代码 🚩前端代码 🚩整体测试 🌲实现说明 随着安全性的要求越来越⾼…...

TCP/UDP 简介,三次握手与四次挥手

一、TCP 三次握手 目的:为了解决在不可靠的信道上建立可靠的网络连接 三次握手是连接请求的过程: A 发送连接请求的数据给 B(发送 SYN 包) B 同意连接,返回数据给 A(返回 SYNACK 包) A 收到后回…...

C++之线程池(Thread Pool)

1.介绍 线程池是一种并发编程的设计模式,用于管理和复用多个线程。以避免频繁创建和销毁线程的开销。线程池的核心思想是预先创建一组线程,并将任务分配给这些线程执行,从而提高程序的性能和资源利用率。 2.线程池的核心组件 一个经典的线程…...

Django中实现简单易用的分页工具

如何在Django中实现简单易用的分页工具?📚 嗨,小伙伴们!今天我们来看看如何在 Django 中实现一个超简单的分页工具。无论你是在处理博客文章、产品列表,还是用户评论,当数据量一大时,分页显得尤…...

【kafka系列】Exactly Once语义

目录 1. Exactly-Once语义的定义 2. Kafka实现Exactly-Once的机制 3. 端到端Exactly-Once示例 场景描述 3.1 生产者配置与代码 3.2 消费者配置与代码 4. 异常场景与Exactly-Once保障 场景1:生产者发送消息后宕机 场景2:消费者处理消息后宕机 场…...

export default与export区别

1.定义: export default‌:用于导出模块中的默认成员。一个模块中只能有一个export default,通常用于导出模块的主要功能或对象。导入时可以使用任意名称,因为它没有具体的名称‌ ‌export‌:用于导出模块中的多个成…...

Qt Creator 5.0.2 (Community)用久了突然变得很卡

目录 1.现象 2.解决方案 1.现象 很久没有用Qt Creator开发项目了,刚刚结束的项目又是用VS2019开发的;这两天刚好有时间去学习一下Qt,刚好要用Qt Creator,结果一打开就没反应,主界面显示出来要好几分钟,最…...

Windows搭建CUDA大模型Docker环境

Windows搭建CUDA大模型Docker环境 一、安装Docker二、拉取镜像三、启动容器四、安装依赖环境五、安装Miniconda3六、设置pip源地址 一、安装Docker windows中docker安装教程 二、拉取镜像 系统:Ubuntu20.04CUDA版本:11.8.0 docker pull nvcr.io/nvid…...

阅读论文笔记《Efficient Estimation of Word Representations in Vector Space》

这篇文章写于2013年,对理解 word2vec 的发展历程挺有帮助。 本文仅适用于 Word2Vect 的复盘 引言 这篇论文致力于探索从海量数据中学习高质量单词向量的技术。当时已发现词向量能保留语义特征,例如 “国王 - 男人 女人≈女王”。论文打算借助该特性&am…...