30分钟学会正则表达式

news2025/2/11 15:34:13

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

作用
  • 匹配 查看一个字符串是否符合正则表达式的语法

  • 搜索 正则表达式来提取字符串中符合要求的文本

  • 替换 查找字符串中符合正则表达式的文本,并用相应的字符串替换

  • 分割 使用正则表达式对字符串进行分割。

案例

原始内容:
    姓名:lilei
    手机号:13888888888
    邮箱:lilei@qq.com

匹配正则:
    姓名:(\w+)\n手机号:(1[3-9]\d{9})\n邮箱:([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)

无需对正则表达式心怀恐惧,接下来将逐步为您阐释,待阅读完毕,您定会茅塞顿开。

字符类

字符类是匹配一个或多个的字符

在上面的例子中:

姓名:(\w+)\n手机号:(1[3-9]\d{9})\n邮箱:([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)

标记的都是字符类,下面是字符类的一些说明

1. . 匹配除 "\n" 之外的任何单个字符。要匹配	包括 '\n'在内的任何字符,请使用 '[.\n]' 的模式。
2. \d 匹配一个数字字符。等价于 [0-9]。
3. \D 匹配一个非数字字符。等价于 [^0-9]。
4. \s 匹配任何空白字符,包括空格、制表符、	换页符等等。等价于[ \f\n\r\t\v]。
5. \S 匹配任何非空白字符。等价于 	[^\f\n\r\t\v]。
6. \w 匹配包括下划线的任何单词字符。等价于	'[A-Za-z0-9_]'。
7. \W 匹配任何非单词字符。等价于	 '[^A-Za-z0-9_]'。

[]用法
[Pp]ython	匹配 "Python" 或 "python"
ub[ye]		匹配 "ruby" 或 "rube"
[aeiou]		匹配中括号内的任意一个字母
[0-9]	    匹配任何数字。类似于 [0123456789]
[a-z]       匹配任何小写字母
[A-Z]	    匹配任何大写字母
[a-zA-Z0-9]	匹配任何字母及数字
[^aeiou]	除了aeiou字母以外的所有字符
[^0-9]	            匹配除了数字外的字符字符类内部,
除了\之外,其他特殊字符不再具备特殊意义,都表示字面值。
^放在第一个位置表示否定,
放在其他位置表示^本身,
-放在中间表示范围,放在字符类中的第一个字符,则表示-本身。

量词

正则表达式量词是用来修饰字符类的数量

在上面的例子中:

姓名:(\w+)\n手机号:(1[3-9]\d{9})\n邮箱:([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)

这些都是修饰前一个字符类的数量,下面是量词的一些说明

1. ?	匹配前面的字符0次或1次
2. *	匹配前面的字符0次或多次
3. +	匹配前面的字符1次或者多次
4. {m}	匹配前面表达式m次
5. {m,}	匹配前面表达式至少m次
6. {,n}	匹配前面的正则表达式最多n次
7. {m,n}	匹配前面的正则表达式至少m次,最多n次

注意点:
 以上量词都是贪婪模式,会尽可能多的匹配,如果要改为非贪婪模式,通过在量词后面跟随一个?来实现

分组与捕获

分组是用圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。

分组和捕获在正则表达式中有着密切的联系,一般情况下,分组即捕获,都用小括号完成: 

  • (exp)    :分组,并捕获该分组匹配到的文本
  • (?:exp) :分组,但不捕获该分组匹配到的文本,可以理解为数学里小括号的作用,可以在后面使用量词或管道符

什么是捕获呢?使用小括号指定一个子表达式后,子表达式匹配的文本(即匹配的内容)可以在其他子表达式中重复使用。

简单来说就是:对需要的内容作一个标记,在搜索或替换时,可以快捷引用

在上面的例子中:

姓名:(\w+)\n手机号:(1[3-9]\d{9})\n邮箱:([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)

有三个分组,分别是分组1,分组2, 分组3, 从1开始

搜索时,可以快捷提取分组的内容

替换时,可以捕获(引用)分组内容进行替换

原始内容:
    姓名:lilei
    手机号:13888888888
    邮箱:lilei@qq.com
匹配正则:
    姓名:(\w+)\n手机号:(1[3-9]\d{9})\n邮箱:([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)
替换正则:
    $1的邮箱是:$3, 电话是:$2
替换后:
    lilei的邮箱是:lilei@qq.com, 电话是:13888888888
字符功能
(ab)将括号中正则表达式作为⼀个分组
\num 或 $num引⽤分组序号匹配到的字符串,在不同的编程语言中会不所不同
(?P<name>)分组起别名,这个不常用可以忽略
(?P=name)引⽤别名为name分组匹配到的字符串

捕获(引用)内容 

1. 通过组号捕获(引用)

  • 每一个没有使用?:的小括号都会分配一个组合,从1开始,从左到右递增,可以通过\i引用前面()内表达式捕获的内容(\i 的内容是值与前面一致,并不是表达式一致)

2.通过组名捕获(引用)

  • 可以通过在左括号后面跟随?P<name>,尖括号中放入组名来为一个组起一个别名,后面通过(?P=name)来引用 前面捕获的内容。如(?P<word>\w+)\s+(?P=word)来匹配重复的单词。(这里引用前面内容,并不是正则表达式)

    (?P<word>\w+)\s+((?P=word))如果引用的内容也需要分组,则外面再加一个括号

注意点:反向引用不能放在字符类[]中使用。

贪婪模式与非贪婪模式

贪婪模式:总是尝试匹配尽可能多的字符。

非贪婪模式,总是尝试匹配尽可能少的字符。

默认是贪婪模式, 在量词后面加上?,就变成贪婪模式

在上面的案例中,没有体现,这里单独给个案例来说明

原始字符:
    <div>test1</div><div>test2</div>
匹配正则:贪婪模式
    <div>.*</div>
结果:
    匹配数量:1
    匹配结果: <div>test1</div><div>test2</div>

匹配正则:非贪婪模式
    <div>.*?</div>
结果:
    匹配数量:2
    匹配结果: <div>test1</div>
              <div>test2</div>

断言

断言不会匹配任何文本,只是对断言所在的文本施加某些约束

1. \b	匹配单词的边界,放在字符类[]中则表示backspace       

2. \B 匹配非单词边界,受ASCII标记影响       

3. \A  指定匹配必须出现在字符串的开头(忽略Multiline选项)。 
 
4. \Z 指定匹配必须出现在字符串的结尾或字符串结尾的\ n之前(忽略Multiline选项)。   

5. ^	在起始处匹配,如果有MULTILINE标志,则在每个换行符后匹配          

6. $	在结尾处匹配,如果有MULTILINE标志,则在每个换行符前匹配   

零宽断言

7. (?=exp)	也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。   

8. (?<=exp)	也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。

负向零宽断言

9. (?!e)	零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。      

10.(?<!e)	零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:

这里以^和$来说明,^和$分别代表的是起始位置和结束位置,不会匹配任务字符

验证用户名格式
假设要求用户名只能由字母开头,后面可以跟字母、数字或下划线,且长度在 3 到 16 位之间。
正则表达式:^[a-zA-Z][a-zA-Z0-9_]{2,15}$
解释:
^ 表示匹配字符串的开头,确保用户名是以字母开头。
[a-zA-Z] 匹配单个字母(大写或小写)。
[a-zA-Z0-9_]{2,15} 表示后面可以跟 2 到 15 个字母、数字或下划线。
$ 表示匹配字符串的结尾,确保整个用户名符合规定的长度和字符组成。

(?=exp) 和(?<=exp)的案例
提取文件名中的编号(文件命名有一定规则):
假设文件命名格式为 “文件_编号.txt”,如 “报告_001.txt”,我们想提取编号部分。
可以使用正则表达式(?<=\_)[0-9]{3}(?=\.txt)。
解释:
    (?<=\_)是正向肯定回顾,表示在当前位置之前(但不包括当前位置)必须有一个 “_” 字符。
    [0-9]{3}匹配 3 个数字,
    (?=\.txt)是正向肯定预查,表示在当前位置之后(但不包括当前位置)必须有一个 “.txt”。

修饰符(标记)

标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。

标记不写在正则表达式里,标记位于表达式之外。

修饰符含义描述
iignore - 不区分大小写将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
gglobal - 全局匹配查找所有的匹配项。
mmulti line - 多行匹配使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s特殊字符圆点 . 中包含换行符 \n默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

在vscode中使用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA无法创建java8、11项目创建出的pom.xml为空

主要是由于Spring3.X版本不支持JDK8&#xff0c;JDK11&#xff0c;最低支持JDK17 解决的话要不就换成JDK17以上的版本&#xff0c;但是不太现实 另外可以参考以下方式解决 修改spring初始化服务器地址为阿里云的 https://start.aliyun.com/

Unity类银河战士恶魔城学习总结(P149 Screen Fade淡入淡出菜单)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了进入游戏和死亡之后的淡入淡出动画效果 UI_FadeScreen.cs 1. Animator 组件的引用 (anim) 该脚本通过 Animator 控制 UI 元…

IDEA 解决Python项目import导入报错、引用不到的问题

使用Idea 23.1 专业版编写Python项目时&#xff0c;import 导入爆红&#xff0c;无法引入其他package的代码&#xff0c;现象如&#xff1a; 解决方案&#xff1a;Idea表头打开 File -> Project Settring 解决效果&#xff1a;

[NSSRound#12 Basic]ordinary forensics

解压出来两个文件&#xff0c;一个是镜像文件另一个不知道 先查看镜像文件 vol.py -f /home/kali/Desktop/forensics.raw imageinfo再查看进程&#xff0c;发现有个cmd的程序 vol.py -f /home/kali/Desktop/forensics.raw --profileWin7SP1x64 pslist进行查看&#xff0c;有…

uniapp中父组件数组更新后与页面渲染数组不一致实战记录

简单描述一下业务场景方便理解: 商品设置功能,支持添加多组商品(点击添加按钮进行增加).可以对任意商品进行删除(点击减少按钮对选中的商品设置进行删除). 问题: 正常添加操作后,对已添加的任意商品删除后,控制台打印数组正常.但是与页面显示不一致.已上图为例,选中尾…

【Git系列】利用 Bash 脚本获取 Git 最后一次非合并提交的提交人

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

hadoop环境配置-vm安装+麒麟ubantu

一.VM版本 选择16版本&#xff0c;15版本存在windows蓝屏的情况&#xff0c;也不用设置HV等相关设置 激活下载参考下述博客&#xff1a;https://blog.csdn.net/matrixlzp/article/details/140674802 提前在bois打开SVM设置&#xff0c;不设置无法打开新建的虚拟机 ubantu下载…

基于SpringBoot的电脑配件销售系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【linux学习指南】详解Linux进程信号保存

文章目录 &#x1f4dd;保存信号&#x1f320; 信号其他相关常⻅概念&#x1f309;在内核中的表⽰ &#x1f320; sigset_t&#x1f320;信号集操作函数&#x1f309;sigprocmask&#x1f309;sigpending &#x1f6a9;总结 &#x1f4dd;保存信号 &#x1f320; 信号其他相关常…

[在线实验]-Redis Docker镜像的下载与部署

镜像下载 dockerredis镜像资源-CSDN文库 加载镜像 使用以下命令从redis.tar文件中加载Docker镜像 docker load --input redis.tar 创建映射目录 为了确保Redis的数据能够持久化&#xff0c;我们需要创建一个本地目录来存储这些数据 mkdir -p datasource/docker/redis 运…

嵌入式QT学习第4天:Qt 信号与槽

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章思维导图如下&#xff1a; 不使用 Qt Designer 的方式进行开发&#xff0c;用代码绘界面&#xff0c;可以锻炼我们的布局能力&#xff0c;和代码逻辑能力&#x…

【设计模式系列】解释器模式(十七)

一、什么是解释器模式 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;它的核心思想是分离实现与解释执行。它用于定义语言的文法规则&#xff0c;并解释执行语言中的表达式。这种模式通常是将每个表达式抽象成一个类&#xff0c;并通…

在开发环境中,前端(手机端),后端(电脑端),那么应该如何设置iisExpress

首先&#xff0c;要想手机端应用能成功请求后端&#xff0c;两个设备至少需在同一个局域网内&#xff0c;且IP地址互通&#xff1b; 因为ajax是http(s)://IP地址端口号的方式请求&#xff0c;但是iisExpress默认是localhost如何解决&#xff0c;并没有IP地址&#xff0c;所以手…

行业分析---2024年蔚来汽车三季度财报及科技日

1 前言 在之前的博客中&#xff0c;笔者撰写了多篇行业类分析的文章&#xff08;科技新能源&#xff09;&#xff1a; 《行业分析---我眼中的Apple Inc.》 《行业分析---马斯克的Tesla》 《行业分析---造车新势力之蔚来汽车》 《行业分析---造车新势力之小鹏汽车》 《行业分析-…

物联网射频识别和RFID开发(一):RFID基础—概念、应用

一、RFID的发展历史 二、RFID与物联网 &#xff08;一&#xff09;物联网与RFID的关系 物联网的基本思想是美国麻省理工学院在1999年提出的&#xff0c;其核心思想是为全球每个物品提供唯一的电子标识符。这种电子标识符就是现在经常提到的“电子产品编码(Electronic Product …

IPGuard与Ping32结合,提供企业级数据加密与防泄密解决方案,全面保障敏感数据安全

随着数字化转型的深入推进&#xff0c;企业面临着日益复杂的安全挑战。如何在确保数据流通的同时&#xff0c;保障企业的核心资产不被泄露&#xff0c;是每个企业必须面对的难题。为此&#xff0c;Ping32与IPGuard联合推出了一套全面的企业级数据加密与防泄密解决方案&#xff…

flink学习(8)——窗口函数

增量聚合函数 ——指窗口每进入一条数据就计算一次 例如&#xff1a;要计算数字之和&#xff0c;进去一个12 计算结果为20&#xff0c; 再进入一个7 ——结果为27 reduce aggregate(aggregateFunction) package com.bigdata.day04;public class _04_agg函数 {public static …

智能桥梁安全运行监测系统守护桥梁安全卫士

一、方案背景 桥梁作为交通基础设施中不可或缺的重要组成部分&#xff0c;其安全稳定的运行直接关联到广大人民群众的生命财产安全以及整个社会的稳定与和谐。桥梁不仅是连接两地的通道&#xff0c;更是经济发展和社会进步的重要纽带。为了确保桥梁的安全运行&#xff0c;桥梁安…

网络原理-初识

1.网络的发展历程 独立模式 独立模式&#xff1a;计算机之间相互独立。 每个终端A、B、C各自持有客户端数据 网络互连 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即可以多个计算机协调工作来完成业务&#xff0c;就有…

房屋结构安全监测系统守护房屋安全卫士

一、系统背景 随着时间的流逝&#xff0c;建筑物的主体结构、设备设施等会因为自然老化、材料疲劳、使用环境的变化以及维护不当等各种因素的影响&#xff0c;逐渐出现性能下降甚至安全隐患。因此&#xff0c;进行房屋安全监测显得尤为重要。房屋结构安全是指建筑物的结构体系在…