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

30分钟学会正则表达式

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

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

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

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

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

案例

原始内容:姓名: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中使用

相关文章:

30分钟学会正则表达式

正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则字符串”&#xff0c;这个“规则字符串”用来表达对字符串的一种过滤逻辑。 作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正…...

Python 自动化办公的 10 大脚本

大家好&#xff0c;我是你们的 Python 讲师&#xff01;今天我们将讨论 10 个实用的 Python 自动化办公脚本。这些脚本可以帮助你简化日常工作&#xff0c;提高效率。无论是处理 Excel 文件、发送邮件&#xff0c;还是自动化网页操作&#xff0c;Python 都能派上用场。 1. 批量…...

Python蒙特卡罗MCMC:优化Metropolis-Hastings采样策略Fisher矩阵计算参数推断应用—模拟与真实数据...

全文链接&#xff1a;https://tecdat.cn/?p38397 本文介绍了其在过去几年中的最新开发成果&#xff0c;特别阐述了两种有助于提升 Metropolis - Hastings 采样性能的新要素&#xff1a;跳跃因子的自适应算法以及逆 Fisher 矩阵的计算&#xff0c;该逆 Fisher 矩阵可用作提议密…...

成绩排序

成绩排序 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给出班里某门课程的成绩单&#xff0c;请你按成绩从高到低对成绩单排序输出&#xff0c;如果有相同分数则名字字典序小的在前。 输入 第一行为…...

MySQL底层概述—7.优化原则及慢查询

大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模拟查询优化器来执行SQL查询语句&#xff0c;从而知道MySQL是如何处理SQL语句的&#xff0c;从而分析出查询语句…...

R““有什么作用在C++中,举例说明

在C中&#xff0c;R""&#xff08;双引号前加R&#xff09;表示一个原始字符串字面量&#xff08;Raw String Literal&#xff09;&#xff0c;其主要作用是让字符串中的反斜杠\和其他特殊字符不被当作转义字符处理&#xff0c;而是保留其原始字面意义。这在处理包含…...

linux中top 命令返回数据解释

当您在 Linux 终端中运行 top 命令时,它会显示一个动态更新的系统状态视图,其中包括许多有关系统性能的数据。下面是对 top 命令返回数据的详细解释: 标题栏 top - 22:46:12 up 2 days, 3:14, 1 user, load average: 0.05, 0.07, 0.09 22:46:12:当前时间。up 2 days, 3:14…...

深入理解二叉树及其变体:平衡二叉树、红黑树、B-树和B+树

一、二叉树简介 二叉树是一种非常常见的数据结构&#xff0c;它具有以下特点&#xff1a; 每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。每个节点的左子树和右子树都是二叉树。 二叉树的常见操作包括&#xff1a;创建、插入、删除、查找、遍历等。下面…...

C++ 编程技巧之StrongType(1)

最近看到一个NamedType的开源库&#xff0c;被里面的Strong Type这个概念和里面的模版实现给秀了一脸&#xff0c;特此总结学习一下 GitHub - joboccara/NamedType: Implementation of strong types in C C本身是一种强类型语言&#xff0c;类型包括int、double等这些build i…...

芯片测试-smith圆图

smith圆图 &#x1f4a2;smith圆图的故事&#x1f4a2;&#x1f4a2;smith圆图中的各部分来历&#x1f4a2;&#x1f4a2;公式推导&#x1f4a2;&#x1f4a2;等电阻圆特点&#x1f4a2;&#x1f4a2;等电抗圆&#x1f4a2;&#x1f4a2;等电抗圆特点&#x1f4a2; &#x1f4a…...

HTML技术深度解析:构建现代网页的基石

引言 HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是构建网页和网上应用的标准标记语言。随着互联网技术的飞速发展&#xff0c;HTML已经成为前端开发中不可或缺的核心技术之一。本文将深入探讨HTML的基本概念、核心元素、最新发展以及在…...

Leecode刷题C语言之判断是否可以赢得数字游戏

执行结果:通过 执行用时和内存消耗如下&#xff1a; bool canAliceWin(int* nums, int numsSize) {int single_digit_sum 0;int double_digit_sum 0;for (int i 0; i < numsSize; i) {if (nums[i] < 10) {single_digit_sum nums[i];} else {double_digit_sum nums[…...

Ubuntu 关机命令

在 Ubuntu 系统中&#xff0c;有几种方法可以关机。以下是常用的关机命令及其说明&#xff1a; 1. 使用 shutdown 命令 shutdown 命令是最常用和最灵活的关机方式。它可以设置定时关机&#xff0c;并且可以发送警告消息给所有登录用户。 立即关机 sudo shutdown now定时关机…...

数据采集中,除了IP池的IP被封,还有哪些常见问题?

在数据采集的过程中&#xff0c;代理IP池的使用无疑为我们打开了一扇通往信息宝库的大门。然而&#xff0c;除了IP被封禁这一常见问题外&#xff0c;还有许多其他问题可能影响数据采集的效果。本文将探讨在数据采集中&#xff0c;除了IP被封之外&#xff0c;还可能遇到的一些常…...

【Anaconda】 创建环境报错:CondaHTTPError: HTTP 000 CONNECTION FAILED for url

问题描述 使用 Anaconda 创建环境时报错&#xff1a; CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/free/noarch/repodata.json.bz2> Elapsed: -An HTTP error occurred when trying to retrieve this URL. HTTP errors are o…...

社交电商破局之“2+1 链动模式 O2O 商城小程序源码”赋能流量困境突围

摘要&#xff1a;本文聚焦于当下商家在流量困境中挣扎的现状&#xff0c;剖析传统电商高流量成本、平台流量获取难等痛点&#xff0c;阐述私域流量池兴起的缘由与价值。重点探究“21 链动模式 O2O 商城小程序源码”如何融入社交电商架构&#xff0c;通过创新机制与线上线下融合…...

【ArcGIS Pro微课1000例】0062:ArcGIS Pro3.3.1中文版安装教程(附安装包下载)

本文讲述ArcGIS Pro3.3.1中文版安装教程(附安装包下载)。 文章目录 一、ArcGIS Pro3.3.1中文版下载二、ArcGIS Pro3.3.1中文版安装一、ArcGIS Pro3.3.1中文版下载 【订阅专栏】,获取完整安装包及专栏配套实验数据。下载后解压,如下图所示: 二、ArcGIS Pro3.3.1中文版安装…...

Linux - web服务器

四、web服务器 1、基础知识 URL&#xff1a;Uniform Resource Locator&#xff0c;统一资源定位符&#xff0c;对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示&#xff0c;是互联网上标准资源的地址。 网址格式&#xff1a;<协议>://<主机或主机名&g…...

设计模式-适配器模式-注册器模式

设计模式-适配器模式-注册器模式 适配器模式 如果开发一个搜索中台&#xff0c;需要适配或接入不同的数据源&#xff0c;可能提供的方法参数和平台调用的方法参数不一致&#xff0c;可以使用适配器模式 适配器模式通过封装对象将复杂的转换过程隐藏于幕后。 被封装的对象甚至…...

减速机润滑油更换的最佳周期是多久?

减速机是工业设备中的重要组成部分&#xff0c;润滑油的使用对于其正常运转和寿命具有至关重要的作用。那么&#xff0c;减速机多久更换一次润滑油呢&#xff1f;实际上&#xff0c;减速机润滑油的更换周期受多种因素影响&#xff0c;以下是一些具体的更换周期建议&#xff1a;…...

程序执行堆栈执行模拟

所有的文件都是在硬盘&#xff08;磁盘&#xff09;上&#xff0c;调用时先调用javac指令的jdk编译成.class然后被java指令的jre送到内存中&#xff0c;java在内存中有自己的一片区域叫JVM&#xff0c;编译进来的文件首先进入方法区。 staitc的属性就是在进入内存的时候开辟了一…...

《Python基础》之数据加密模块hashlib的用法

目录 一、简介 二、用法 步骤一、导入hashlib库 步骤二、创建哈希对象 步骤三、往哈希对象中传值 1、可以在创建对象的时候传值 2、使用updata传值 步骤四、获取经过哈希对象加密后的值 三、注意事项 1、编码问题 2、安全性 3、多次传值 四、总结 一、简介 hashli…...

安装Fcitx5输入框架和输入法自动部署脚本(来自Mark24)-Ubuntu通用

在Ubuntu22.04上安装rime中文输入法的基本教程 上述文章接近废弃。 使用新逻辑配置基本的Fcitx5的输入法。 安装 第一步&#xff0c;下载相关组件 sudo nala install vim sudo nala install ruby sudo nala install fcitx5-rime第二步&#xff0c;设置语言为Fcitx5 而非 默认…...

【IMF靶场渗透】

文章目录 一、基础信息 二、信息收集 三、flag1 四、flag2 五、flag3 六、flag4 七、flag5 八、flag6 一、基础信息 Kali IP&#xff1a;192.168.20.146 靶机IP&#xff1a;192.168.20.147 二、信息收集 Nmap -sP 192.168.20.0/24 Arp-scan -l nmap -sS -sV -p- -…...

Zookeeper选举算法与提案处理概览

共识算法(Consensus Algorithm) 共识算法即在分布式系统中节点达成共识的算法&#xff0c;提高系统在分布式环境下的容错性。 依据系统对故障组件的容错能力可分为&#xff1a; 崩溃容错协议(Crash Fault Tolerant, CFT) : 无恶意行为&#xff0c;如进程崩溃&#xff0c;只要…...

深入了解 Adam 优化器对显存的需求:以 LLaMA-2 7B 模型为例 (中英双语)

中文版 深入了解 Adam 优化器对显存的额外需求&#xff1a;模型参数与优化器状态的显存开销分析 在深度学习模型的训练过程中&#xff0c;显存是一个关键的资源&#xff0c;尤其在处理大型语言模型或深度神经网络时。训练时的显存需求不仅包括模型参数本身&#xff0c;还涉及…...

数据分析学习

数据分析的定义 数据分析是通过对收集到的数据进行清理、转换、建模、分析和解释&#xff0c;从中提取有用的信息和洞察&#xff0c;以帮助做出更好的决策。数据分析可以应用于各种领域&#xff0c;比如商业、金融、医疗、市场营销等&#xff0c;目的是通过数据来发现模式、趋…...

PaddleOCR:一款高性能的OCR工具介绍

一、引言 随着人工智能技术的不断发展&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术在各行各业得到了广泛应用。OCR技术能够将图片、扫描件等非结构化数据中的文字信息提取出来&#xff0c;转换为可编辑的文本格式。在我国&#xff0c;百度开源了一款优秀的OCR工具…...

Transformers快速入门代码解析(一):注意力机制——Attention:Scaled Dot-product Attention

Attention&#xff1a;Scaled Dot-product Attention 引言Scaled Dot-product Attention代码 引言 请注意&#xff01;&#xff01;&#xff01;本博客使用了教程Transformers快速入门中的全部代码&#xff01;&#xff01;&#xff01; 只在我个人理解的基础上为代码添加了注释…...

Git中HEAD、工作树和索引的区别

在Git版本控制系统中&#xff0c;HEAD、工作树&#xff08;Working Tree&#xff09;和索引&#xff08;Index&#xff09;是三个非常重要的概念&#xff0c;它们分别代表了不同的状态或区域&#xff0c;下面我将对这三个概念进行详细的解释。 HEAD 定义&#xff1a;HEAD是一…...

做盗文网站/搜外网友情链接

在长久的“裸奔”之后&#xff0c;电动平衡车即将穿上“衣服”。 早先&#xff0c;北京、上海等地已经陆续出台了相关政策&#xff0c;全面禁止电动平衡车、电动滑板等违规交通工具上路。而在近日&#xff0c;首个电动平衡车标准也新鲜出炉了。 昨天&#xff0c;在国家质检总局…...

重庆网站建设营销/站长统计app最新版本2023

本文要谈的IM通信协议指的是应用层通信“语言”&#xff0c;并非指传输层协议&#xff08;如TCP、UDP&#xff09;。IM通信协议的制定是IM开发中起点&#xff0c;也是贯穿设计、开发、运维始终的核心所在&#xff0c;通信协议设计的好坏&#xff0c;直接影响后绪环节的用户体验…...

基于html的网站设计/北京十大教育培训机构排名

Jenkins 动态 Slave 背景 Jenkins日常工作中在代码编译、打包、部署等一系列操作&#xff0c;都是以 Job 的形式进行&#xff0c;而 Job 的承载是 Jenkins 所在的主机&#xff0c;当面临 Jenkins 扩展、迁移等操作时&#xff0c;需要安装大量的依赖软件来支持 Job的运行。所以本…...

网站建设哪个品牌好/2345网址导航下载桌面

题目背景 大家都知道&#xff0c;基因可以看作一个碱基对序列。它包含了444种核苷酸&#xff0c;简记作A,C,G,TA,C,G,TA,C,G,T。生物学家正致力于寻找人类基因的功能&#xff0c;以利用于诊断疾病和发明药物。 在一个人类基因工作组的任务中&#xff0c;生物学家研究的是&#…...

大学 建网站/毕节地seo

关于二叉排序树的定义以及如何查找指定关键字的结点不再赘述&#xff0c;本篇文章主要讨论二叉排序树如何删除一个指定的结点。 当我们利用查找算法在树中找到了对应的结点的时候&#xff0c;可能会遇到三类情况。 第一类情况&#xff1a; 即将删除的结点是叶结点&#xff0…...

heroku wordpress/2020十大网络热词

由于新版本的EasyNVR更新了很多功能&#xff0c;部分用户按旧版的方法去配置新版会发现服务器有报错情况产生&#xff0c;这是由于新版在旧版之上做了升级&#xff0c;部分功能需要重新调配才能生效。 近期就有客户反应&#xff0c;我们4.0.0版本以上的EasyNVR接入EasyNVS的时候…...