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

正则表达式详解(regular expression)

💡 正则表达式(Regular Expression, regex)知识点总结 💡

正则表达式是一种用于匹配字符串的模式,广泛用于搜索、替换、验证等操作。


📌 正则表达式的主要作用

1️⃣ 字符串匹配 🧐

  • 检查一个字符串是否符合某种模式。
  • 例如,验证用户输入的邮箱手机号密码强度等。

2️⃣ 搜索和提取 🔍

  • 在大量文本中找到符合要求的内容。
  • 例如,从网页中提取URL、邮箱、电话号码等。

3️⃣ 字符串替换 🔄

  • 将符合规则的文本替换为指定内容。
  • 例如,把多个空格替换成一个空格

4️⃣ 数据格式化 ✏️

  • 规范化文本数据,如日期格式转换、去除特殊字符等。

5️⃣ 日志分析 📊

  • 通过正则表达式分析日志文件,提取错误信息IP 地址等重要数据。

📌 正则表达式的基础

  1. 普通字符匹配

    • abc 只能匹配 "abc",不会匹配 "aabc""abcd" 等。
  2. 特殊字符(元字符)

    元字符含义示例
    .任意单个字符(换行符除外)"a.c" 可匹配 "abc""aac"
    \d数字 [0-9]"12\d" 可匹配 "123""125"
    \w字母、数字或下划线 [a-zA-Z0-9_]"\w+" 可匹配 "hello123"
    \s空白字符(空格、制表符、换行符)"a\sb" 可匹配 "a b"
    \b单词边界"\bcat\b" 匹配 "cat" 但不匹配 "catalog"
    ^匹配行首"^abc" 只匹配 "abc" 在行首的情况
    $匹配行尾"xyz$" 只匹配 "xyz" 在行尾的情况

📌 量词(控制匹配次数)

量词含义示例
*匹配 0 次或多次a* 匹配 """a""aaaa"
+匹配 1 次或多次a+ 匹配 "a""aaaa",但不匹配 ""
?匹配 0 次或 1 次a? 匹配 """a"
{n}匹配 na{3} 仅匹配 "aaa"
{n,}至少匹配 na{2,} 匹配 "aa""aaa"
{n,m}匹配 nma{2,4} 匹配 "aa""aaa""aaaa"

📌 字符类(Character Classes)

语法含义示例
[abc]只匹配 abcgr[ae]y 可匹配 "gray""grey"
[^abc]a、b、c 以外的任何字符"[^aeiou]" 匹配所有辅音字母
[0-9]匹配 0~9 的任何数字"[0-9]+" 匹配 "123""456"
[a-z]匹配小写字母"[a-z]+" 匹配 "hello"
[A-Z]匹配大写字母"[A-Z]+" 匹配 "HELLO"

📌 逻辑运算符

语法含义示例
``逻辑 OR(或)
()分组"(ab)+" 可匹配 "ab""abab"
(?:...)非捕获分组"(?:ab)+" 仅匹配 "abab",但不存储匹配内容

📌 零宽断言

✨ 下面是正则表达式中 (?=) 等相关的零宽断言的作用和示例,整理成表格供你参考 📜👇

表达式名称 🏷作用 💡示例
(?=...)正向先行断言匹配当前位置,后面必须满足 ... 的条件,但不消耗字符\d(?=px) 匹配**5px 中的 5**,但不匹配 5em
(?!...)负向先行断言匹配当前位置,后面不能...\d(?!px) 匹配 5em5,但不匹配 5px
(?<=...)正向后行断言 🔄匹配当前位置,前面必须满足 ...(?<=\$)\d+ 匹配**$100 中的 100**,但不匹配 USD100
(?<!...)负向后行断言 🚫匹配当前位置,前面不能...(?<!\$)\d+ 匹配 USD100100,但不匹配 $100

💡 小贴士

  • 先行断言(?=...) & (?!...)检查后面的字符,但不消耗它们。
  • 后行断言(?<=...) & (?<!...)检查前面的字符,但不消耗它们。
  • 断言是零宽匹配(不占字符),用于复杂匹配规则!

📌 贪婪模式与懒惰模式

在正则表达式中,贪婪模式(Greedy Mode)指的是匹配时尽可能多地匹配字符。

例如:

  • a.*b"acbcb" 上的贪婪匹配结果是 "acbcb"(尽可能匹配最长的内容)。
  • 如果使用 懒惰模式(Lazy Mode)a.*?b,则匹配的结果是 "acb"(尽可能匹配最短的内容)。

贪婪匹配(Greedy Match)VS 懒惰匹配(Lazy Match)

模式符号行为
贪婪匹配(Greedy).*尽可能多地匹配
懒惰匹配(Lazy).*?尽可能少地匹配
占有匹配(Possessive).*+一次性匹配,不回溯

💡 记住:贪婪(Greedy)匹配会尽可能多地匹配字符,而懒惰(Lazy)匹配会尽可能少地匹配字符。🚀

📌 常见正则表达式

1️⃣ 匹配邮箱 📧:

^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

✅ 可匹配 "test.email@example.com"

2️⃣ 匹配手机号 📱(以中国手机号 1 开头):

^1[3-9]\d{9}$

✅ 可匹配 "13812345678"

3️⃣ 匹配 IP 地址 🌐:

^(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\.
(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])$

✅ 可匹配 "192.168.1.1"

4️⃣ 匹配日期(YYYY-MM-DD) 📆:

^(19|20)\d\d-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$

✅ 可匹配 "2024-03-14"


📌 Java 正则表达式示例

import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String text = "hello regex 123!";String pattern = "\\d+"; // 匹配数字Pattern p = Pattern.compile(pattern);Matcher m = p.matcher(text);while (m.find()) {System.out.println("匹配到: " + m.group());}}
}

🔹 输出

匹配到: 123

📌 小结

正则表达式的核心知识点
元字符(特殊字符). \d \w \s ^ $
量词* + ? {n,m}
字符类[abc] [a-z] [^0-9]
逻辑运算| ()
常见应用:邮箱、手机号、IP 地址等

相关文章:

正则表达式详解(regular expression)

&#x1f4a1; 正则表达式&#xff08;Regular Expression, regex&#xff09;知识点总结 &#x1f4a1; 正则表达式是一种用于匹配字符串的模式&#xff0c;广泛用于搜索、替换、验证等操作。 &#x1f4cc; 正则表达式的主要作用 1️⃣ 字符串匹配 &#x1f9d0; 检查一个…...

经典面试题:C/C++中static关键字的三大核心作用与实战应用

一、修饰局部变量&#xff1a;改变生命周期&#xff0c;保留跨调用状态 核心作用&#xff1a; ​延长生命周期&#xff1a;将局部变量从栈区移至静态存储区&#xff08;数据段或BSS段&#xff09;&#xff0c;生命周期与程序一致​保留状态&#xff1a;变量在函数多次调用间保…...

笔记:代码随想录算法训练营day57:99.岛屿数量 深搜、岛屿数量 广搜、100.岛屿的最大面积

学习资料&#xff1a;代码随想录 注&#xff1a;文中含大模型生成内容 99. 岛屿数量 卡码网题目链接&#xff08;ACM模式&#xff09; 先看深搜方法&#xff1a;找到未标标记过的说明找到一片陆地的或者一片陆地的一个角落&#xff0c;dfs搜索是寻找相连接的陆地其余部分并…...

【小也的Java之旅系列】01 分布式、集群、微服务的区别

前言 做Java开发多年&#xff0c;一直以来都有想把Java做成一个系列的想法&#xff0c;最近整理自己的笔记发现有很多值得写的内容&#xff0c;但这些内容又往往杂乱不堪。CSDN上有很多高质量的Java博客&#xff0c;但大多不是从一个人成长的角度去写的。而我们——一个技术人…...

基于视觉的核桃分级与套膜装置研究(大纲)

基于视觉的核桃分级与套膜装置研究&#xff1a;从设计到实现的完整指南 &#xff08;SolidWorks、OpenCV、STM32开发实践&#xff09; &#x1f31f; 项目背景与目标 1.1 为什么选择视觉分级与套膜&#xff1f; 产业痛点&#xff1a; 中国核桃年产量全球第一&#xff0c;但…...

JimuReport与deepseek结合,颠覆现有BI模式

在数字化转型的浪潮中&#xff0c;企业对数据的依赖程度越来越高&#xff0c;如何高效地分析和利用数据成为关键。JimuReport凭借其强大的报表设计能力和灵活的数据处理功能&#xff0c;已经成为众多企业的首选工具。如今&#xff0c;它即将与DeepSeek深度结合&#xff0c;为企…...

大白话详细解读函数之柯里化

1. 函数柯里化是什么&#xff1f; 函数柯里化是一种将多参数函数转换成一系列单参数函数的技术。简单来说&#xff0c;就是把一个接收多个参数的函数&#xff0c;变成每次只接收一个参数&#xff0c;并返回一个新函数&#xff0c;直到所有参数都接收完毕&#xff0c;最后返回结…...

11、STL中的set使用方法

一、了解 set 是 C 标准模板库&#xff08;STL&#xff09;中提供的有序关联容器之一。基于红黑树&#xff08;Red-Black Tree&#xff09;实现&#xff0c;用于存储一组唯一的元素&#xff0c;并按照元素的值进行排序。 set的特性 唯一性 键是唯一的。无重复。 有序性 按升序…...

git 子模块的使用

1. 子模块的核心概念 独立性&#xff1a;子模块是一个独立的 Git 仓库&#xff0c;有自己的提交历史和分支。 指针机制&#xff1a;主仓库仅记录子模块的特定提交&#xff08;而不是分支&#xff09;&#xff0c;确保代码版本可控。 适用场景&#xff1a;依赖第三方库、多项目…...

vsftpd服务权限配置

主配置文件&#xff1a;/etc/vsftpd/vsftpd.conf anonymous_enableYES   #是否启用匿名用户 no_anon_passwordYES   #匿名用户login时不询问口令 anon_upload_enableyes | no # 匿名用户对文件&#xff08;非目录&#xff09;上传权限。 anon_world_readable_onlyyes | …...

遥感数据获取、处理、分析到模型搭建全流程学习!DeepSeek、Python、OpenCV驱动空天地遥感数据分析

【扔进数据&#xff0c;直接出结果】在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专…...

操作系统——(管程、线程、进程通信)

目录 一、管程机制 &#xff08;1&#xff09;管程定义 &#xff08;2&#xff09;特点&#xff1a; 二、进程通信 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;高级通信机制 三、线程 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;与进程比较…...

Sqlserver安全篇之_启用和禁用Named Pipes的案列介绍

https://learn.microsoft.com/zh-cn/sql/tools/configuration-manager/named-pipes-properties?viewsql-server-ver16 https://learn.microsoft.com/zh-cn/sql/tools/configuration-manager/client-protocols-named-pipes-properties-protocol-tab?viewsql-server-ver16 默认…...

Redis 本地安装

首先安装&#xff1a; https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-from-source/ 进入root目录 tar -xzvf redis-stable.tar.gz cd redis-stable make然后 install sudo make install最后可以直接启动 redis-server但是此时启…...

外卖订单如何教会我变量与数据类型?

目录 前言一、现实场景1.1 你点的每一碗&#xff0c;都是程序员的KPI1.2 关键数据角色扮演 二、技术映射三、知识点呈现3.1 变量——你的数字日记本3.2 数据类型——数值的「职业规划」3.3 运算符——数学老师的黑板擦 四、代码实现4.1 基础版&#xff1a;计算器の复仇4.2 进阶…...

HOW - 平时如何保持学习和成长?

目录 前言数字时代的系统性学习方法论一、场景驱动的实战学习&#xff1a;从工具赋能到知识沉淀二、结构化的系统学习&#xff1a;构建知识体系的方法论&#xff08;一&#xff09;精准学习策略&#xff08;二&#xff09;学习成效评估体系&#xff08;三&#xff09;专项研究 …...

Web开发-JS应用原生代码前端数据加密CryptoJS库jsencrypt库代码混淆

知识点&#xff1a; 1、安全开发-原生JS-数据加密&代码混淆 2、安全开发-原生JS-数据解密安全案例 一、演示案例-WEB开发-原生JS&第三方库-数据加密 前端技术JS实现&#xff1a; 1、非加密数据大致流程&#xff1a; 客户端发送->明文数据传输-服务端接受数据->…...

手动集成sqlite的方法

注意到sqlite有backup方法&#xff08;https://www.sqlite.org/backup.html&#xff09;。 也注意到android中sysroot下&#xff0c;没有sqlite3的库&#xff0c;也没有相关头文件。 如果要使用 sqlite 的backup&#xff0c;那么就需要手动集成sqlite代码到项目中。可以如下操…...

比特币牛市还在不在

在加密货币的风云世界里&#xff0c;比特币的一举一动始终牵动着投资者们的神经。近期比特币的涨幅动作&#xff0c;再次引发了市场对于牛市是否仍在延续的激烈讨论。 在深入探索比特币市场的过程中&#xff0c;获取全面且及时的资讯至关重要。您可以通过访问Techub News&#…...

Python、MATLAB和PPT完成数学建模竞赛中的地图绘制

参加数学建模比赛时&#xff0c;很多题目——诸如统计类、数据挖掘类、环保类、建议类的题目总会涉及到地理相关的情景&#xff0c;往往要求我们制作与地图相关的可视化内容。如下图&#xff0c;这是21年亚太赛的那道塞罕坝的题目&#xff0c;期间涉及到温度、降水和森林覆盖率…...

跨平台RTSP高性能实时播放器实现思路

跨平台RTSP高性能实时播放器实现思路 目标&#xff1a;局域网100ms以内超低延迟 一、引言 现有播放器&#xff08;如VLC&#xff09;在RTSP实时播放场景中面临高延迟&#xff08;通常数秒&#xff09;和资源占用大的问题。本文提出一种跨平台解决方案&#xff0c;通过网络层…...

编写一个简单的chrome截图扩展

文件结构&#xff1a; screenshot |-- background.js ---> service_worker运行的js |-- images ---> 图片 | |-- logo-128x128.png | |-- logo-16x16.png | |-- logo-32x32.png | -- logo-48x48.png -- manifest.json --->…...

吴恩达机器学习笔记复盘(六)梯度下降算法

简介 梯度下降&#xff08;Gradient Descent&#xff09;是一种常用的优化算法&#xff0c;广泛应用于机器学习、深度学习等领域&#xff0c;在这里是用于求J&#xff08;w,b&#xff09;局部最小值。 我自己觉得这样说有点过于抽象。换个直观点的说法就是&#xff0c;一个人…...

【机器学习chp14 — 3】生成式模型—生成对抗网络GAN(超详细分析,易于理解,推导严谨,一文就够了)

目录 三、生成对抗网络 ( Generative Adversarial Networks&#xff0c;GAN ) 1、GAN的基本思想 &#xff08;1&#xff09;生成器与判别器的基本结构与演变 &#xff08;2&#xff09;“对抗”机制及名词由来 2、GAN训练的基本算法 &#xff08;1&#xff09;网络初始化与…...

机器人打磨控制技术

工具姿态调整运动 法线方向对齐运动&#xff1a;机器人实时调整工具姿态&#xff0c;使打磨工具的轴线与工件曲面的法线方向一致。例如&#xff0c;在球面打磨时&#xff0c;工具需始终垂直于球面切线。角度补偿运动&#xff1a;针对倾斜或不规则曲面&#xff0c;通过调整机器人…...

K8S学习之基础四十:K8S配置altermanager发送告警到钉钉群

配置altermanager发送告警到钉钉群 ​ 创建钉钉群&#xff0c;设置机器人助手(必须是管理员才能设置)&#xff0c;获取webhook webhook&#xff1a; https://oapi.dingtalk.com/robot/send?access_token25bed933a52d69f192347b5be4b2193bc0b257a6d9ae68d81619e3ae3d93f7c6…...

Spring Boot + Spring Integration整合MQTT打造双向通信客户端

1. 概述 本文分两个章节讲解MQTT相关的知识&#xff0c;第一部份主要讲解MQTT的原理和相关配置&#xff0c;第二个章节主要讲和Spring boot的integration相结合代码的具体实现&#xff0c;如果想快速实现功能&#xff0c;可直接跳过第一章节查看第二章讲。 1.1 MQTT搭建 为了…...

Sampling – Model Context Protocol Specification

网页链接 https://spec.modelcontextprotocol.io/specification/draft/client/sampling/ 主要内容概述 该网页详细介绍了Model Context Protocol (MCP) 中的“Sampling”功能。Sampling允许服务器通过客户端请求语言模型&#xff08;LLM&#xff09;生成文本、音频或图像内容…...

Java 填充 PDF 模版

制作 PDF 模版 安装 OnlyOffice 从 OnlyOffice 官网下载 OnlyOffice Desktop&#xff0c;安装过程很简单&#xff0c;一路下一步即可。用 OnlyOffice 制作 PDF 模版&#xff08;表单&#xff09; 使用 OnlyOffice 表单设计器&#xff0c;制作表单&#xff0c;如下图 注意命名…...

前端项目中应该如何选择正确的图片格式

在前端项目中选择正确的图片格式是优化页面性能、提升用户体验的关键步骤之一。以下是常见图片格式的特点、适用场景及选择建议&#xff0c;帮助你在不同场景下做出最优决策&#xff1a; 一、常见图片格式对比 格式特点适用场景不适用场景JPEG- 有损压缩&#xff0c;文件小- 不…...