正则表达式 Regular Expression

news2024/12/24 8:30:51

  • 情景引入
    • 改代码
    • 查找文件
    • 词法分析器
    • 网站注册密码
    • 信息爬取
  • 简介
  • 在线测试工具
    • Regulex
    • RegExr
  • 语法
    • 普通字符
    • 非打印字符
    • 特殊字符
    • 限定符
    • 定位符
    • 修饰符
    • 元字符
  • 实例
    • 匹配邮箱

情景引入

改代码

修改代码格式问题,或者重命名代码里的某个变量等,都可以使用 VS Code 自带的搜索框中的 RE。熟练的掌握正则表达式,能够帮助程序员以最快的速度写出最优雅的代码

在这里插入图片描述

查找文件

可以使用 ? 和 * 通配符来查找硬盘上的文件,这是简单的通配符。

  • ? 通配符匹配文件名中的 0 个或 1 个字符;
  • 而 * 通配符匹配零个或多个字符。

*api 这样的模式将查找下列文件:

在这里插入图片描述
RE 功能更强大,而且更加灵活。

词法分析器

编译器中的词法分析器,会使用 RE 去匹配代码中的关键字。

在这里插入图片描述

网站注册密码

网站上的注册表单会用到 RE 去判断密码的复杂程度。

在这里插入图片描述

信息爬取

在爬虫中,同样可以用 RE 去提取需要的信息。

在这里插入图片描述

简介

  • 正则表达式(Regular Expression)是一种用于 匹配替换字符串中的特定模式 的语言,可以把它当作通配符的增强版,它可以用元字符、量词、分组、断言等来表示复杂的规则。
  • 正则表达式包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
  • 正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。

下面先给出一个简单的示例:

^[0-9]+abc$
  • ^ 为匹配输入字符串的开始位置。
  • [0-9]+ 匹配多个数字:[0-9] 匹配单个数字,+ 匹配一个或者多个。
  • abc$ 匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。

我们在写用户注册表单时,只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定:

在这里插入图片描述

在线测试工具

Regulex

正则表达式在线测试工具:https://regex101.com/

在这里插入图片描述

RegExr

正则表达式在线测试工具:https://regexr.com/

在这里插入图片描述

语法

构造正则表达式的方法和创建数学表达式的方法一样,用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。

普通字符

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符,这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号

字符描述
[ABC]匹配 […] 中的所有字符,例如 [ae] 匹配字符串 “You are my angle.” 中所有的 a e 字母。在这里插入图片描述
[^ABC]匹配除了 […] 中字符的所有字符,例如 [^ae] 匹配字符串 “You are my angle.” 中除了 a e 字母的所有字母。在这里插入图片描述
[A-Z][A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。在这里插入图片描述
.匹配除换行符(\n、\r)之外的任何单个字符,相等于 [^\n\r]在这里插入图片描述
[\s\S]匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。在这里插入图片描述
\w匹配字母、数字、下划线。等价于 [A-Za-z0-9_] 在这里插入图片描述

非打印字符

非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列:

在这里插入图片描述

特殊字符

所谓特殊字符,就是一些有特殊含义的字符。

  • 如 “baby*baby” 中的 * ,简单的说就是表示任何字符串的意思。
  • 如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 \baby\*baby 匹配字符串 baby*baby

若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。

在这里插入图片描述

限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * + ? {n} {n,} {n,m} 共6种。

限定符
* 匹配前面的子表达式零次或多次。例如,ab* 能匹配 “a” 以及 “abb”。* 等价于 {0,}。在这里插入图片描述
+ 匹配前面的子表达式一次或多次。例如,ab+ 能匹配 “ab” 以及 “abb”,但不能匹配 “a”。+ 等价于 {1,}。在这里插入图片描述
? 匹配前面的子表达式零次或一次。例如,do(es)? 可以匹配 “do” 、 “does”、 “dog” 中的 “do” 和 “does”。? 等价于 {0,1}。在这里插入图片描述
{n} n 是一个非负整数。匹配确定的 n 次。例如,o{2} 表示匹配2个 o,不能匹配 “Bob” 中的 o,但是能匹配 “food” 中的两个 o。 在这里插入图片描述
{n,} n 是一个非负整数。至少匹配 n 次。例如,o{2,} 不能匹配 “Bob” 中的 o,但能匹配 “foooood” 中的所有 o。o{1,} 等价于 o+o{0,} 则等价于 o*在这里插入图片描述
{n,m} m 和 n 均为非负整数,其中 n <= m最少匹配 n 次且最多匹配 m 次。例如,o{1,3} 将匹配 “fooooood” 中的前三个 o。o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。 在这里插入图片描述

以下正则表达式匹配一个正整数,[1-9]设置第一个数字不是 0,[0-9]* 表示任意多个数字:

/[1-9][0-9]*/
  • 请注意,限定符出现在范围表达式 [0-9] 之后。因此,它应用于整个范围表达式,在本例中,只指定从 0 到 9 的数字(包括 0 和 9)。
  • 这里不使用 + 限定符,因为在第二个位置或后面的位置不一定需要有一个数字。
  • 也不使用 ? 字符,因为使用 ? 会将整数限制到只有两位数。

* + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配

贪婪:下面的表达式匹配从开始小于符号 (<) 到关闭 h1 标记的大于符号 (>) 之间的所有内容

/<.*>/

在这里插入图片描述
非贪婪:如果只需要匹配开始和结束 h1 标签,下面的非贪婪表达式只匹配 <h1>

/<.*?>/

在这里插入图片描述

定位符

定位符用来描述字符串或单词的边界 ^ $ 分别指字符串的开始与结束, \b 描述单词的前或后边界, \B 表示非单词边界。

在这里插入图片描述
注意不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。

修饰符

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

标记不写在正则表达式里,标记位于表达式之外,格式如下:

/pattern/flags

在这里插入图片描述

  • g 修饰符
    查找字符串中所有的匹配项
    在这里插入图片描述
  • i 修饰符
    不区分大小写匹配
    在这里插入图片描述
  • m 修饰符
    使 ^ $ 匹配一段文本中每行的开始和结束位置, g 只匹配第一行添加 m 之后实现多行
    在这里插入图片描述
  • s 修饰符
    默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 之后, . 中包含换行符 \n
    在这里插入图片描述

元字符

元字符的完整列表:元字符 - 完整列表

实例

匹配邮箱

在这里插入图片描述
测试如下图:

在这里插入图片描述

参考:

  • 10分钟快速掌握正则表达式
  • runoob 正则表达式 - 教程

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

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

相关文章

Mysql 管理

目录 0 课程视频 1 系统数据库 -> 安装完mysql ->自带四个数据库 2 常用工具 -> 写脚本用 2.1 mysql 客户端工具 2.2 mysqladmin 2.3 mysqlbinlog -> 二进制日志 -> 运维讲解 2.4 mysqlshow 2.5 mysqldump 备份用 ->导出 2.6 mysqlimport/source -…

一篇带你了解大厂都在用的DDD领域驱动设计

一、DDD到底是什么 DDD全称Domain Driven Design&#xff0c;领域驱动设计。 为了解决快速变化、复杂系统的设计问题的 领域驱动设计是Eric Evans在2004年发表的Domain Driven Design&#xff08;领域驱动设计&#xff0c;DDD)著作中提出的一种从系统分析到软件建模的一套方…

K8s基础2——部署单Master节点K8s集群、切换containerd容器运行时

文章目录 一、部署K8S集群方式二、kubeadm工具搭建K8s集群2.1 资源配置2.2 服务器规划2.3 搭建流程2.3.1 操作系统初始化2.3.2 使用docker容器引擎2.3.3 安装cri-dockerd2.3.4 安装kubeadm&#xff0c;kubelet和kubectl2.3.5 master节点初始化2.3.6 加入node节点2.3.7 部署容器…

redhat 7.9 安装oracle 11g-11.2.0.4

redhat 7.9 安装oracle 11g-11.2.0.4 1、数据库下载和安装文档1.1、查看oracle 11g 适合安装的linux版本1.2、安装文档1.3、license种类解释&#xff08; XE版 标准本 个人版 企业版&#xff09;1.4、在安装完oracle后再创建数据库1.5、DBA的文档1.6、Automatic Storage Manage…

2.4 等比数列

学习步骤&#xff1a; 如果我要学习等比数列&#xff0c;我会按照以下步骤进行学习&#xff1a; 定义和性质&#xff1a;首先了解等比数列的定义和性质&#xff0c;包括公比、首项、通项公式、求和公式等。 例题练习&#xff1a;通过练习一些简单的例题来理解等比数列的概念和…

BMS的菊花链技术和AFE

文章目录 菊花链在BMS中的位置菊花链拓扑菊花链通信AFE&#xff08;Analog Front End&#xff09;AFE均衡电路菊花链应用示例MC33665AMC33665A SPI通信 MC33775AMC33775A 硬件资源 文章参考 菊花链在BMS中的位置 如下图&#xff0c;AFE在从板中&#xff0c;用来采集电池电压和…

ChatGPT在语音识别技术领域的应用

第一章&#xff1a;引言 近年来&#xff0c;随着深度学习技术的飞速发展&#xff0c;语音识别技术已经成为了人工智能领域中备受关注的重要领域之一。在语音识别技术的应用中&#xff0c;ChatGPT作为一款先进的语言模型&#xff0c;可以发挥其强大的文本生成和自然语言处理能力…

#详细介绍!!! 文件系统的一点相关知识

本文主要是介绍了一些计算机文件相关的基础知识&#xff0c;帮助读者更好的认识文件 目录 1.内存和外存 内存 特性1&#xff1a;读写速度快 特性2&#xff1a;内存中的数据不能永久存储 特性3&#xff1a;容量小&#xff0c;价格贵 外存 内存和外存对比总结 2.认识文件 …

Linux Ansible导入剧本、任务滚动执行、任务并行执行

目录 任务滚动更新 配置并行 包含和导入剧本 任务滚动更新 实现在多台被管理节点执行任务时&#xff0c;第一台的整个playbook执行完成后再在下一台主机执行任务&#xff1b;通过serial元素来实现 serial&#xff1a;1 表示一台一台执行playbook&#xff08;serial也可以指定…

【白嫖系列】教育邮箱申请最新专业绘图软件OriginPro(官方渠道)

&#x1f951; Welcome to Aedream同学 s blog! &#x1f951; 文章目录 预备简单介绍有效期与申请条件申请链接查看邮箱切换中文 预备 以edu结尾的邮箱&#xff0c;毕业也可使用校友邮箱等。 简单介绍 Origin是一款数据分析和绘图的软件&#xff0c;具备统计、峰值分析和曲线…

[oeasy]python0144_try的完全体_否则_else_最终_finally

try的完全体 回忆上次内容 上次细化了主控程序(main.py) 导入(get_fruits.py)处理(process.py)输出(output.py) 使用了 try 结构 tryexcept发现异常就报错 输入部分的错误 应该在 输入部分来报 具体怎么报呢&#xff1f;&#x1f914; 完善输入 输入的时候 应该包括 对于输…

新写了的 AOP 日志切面,方便以后直接使用。

前言 最近项目进入联调阶段&#xff0c;服务层的接口需要和协议层进行交互&#xff0c;协议层需要将入参[json字符串]组装成服务层所需的json字符串&#xff0c;组装的过程中很容易出错。入参出错导致接口调试失败问题在联调中出现很多次&#xff0c;因此就想写一个请求日志切…

AI 时代,知识工作者的生存指南

最近&#xff0c;大家可能已经见识过 AI 的威力了吧&#xff0c;以 ChatGPT 为代表的 人工智能&#xff08;AI&#xff09;展现出接近人一样的回答水准。 来自 Craft AI Assitant AI 就在那里&#xff0c;是房间里的大象&#xff0c;大家不能总装做对自己没有影响。要知道&…

Python使用CV2库捕获、播放和保存摄像头视频

Python使用CV2库捕获、播放和保存摄像头视频 特别提示&#xff1a;CV2指的是OpenCV2&#xff08;Open Source Computer Vision Library&#xff09;&#xff0c;安装的时候是 opencv_python&#xff0c;但在导入的时候采用 import cv2。 若想使用cv2库必须先安装&#xff0c;P…

2023年最新5A景区有多少个?Python可视化告诉你

2023年最新5A景区有多少个&#xff1f;Python可视化告诉你 五一小长假来了&#xff0c;很多人想抓住小长假的机会去旅游。 5A景区是大多数人的首选&#xff0c;全国最新有多少个5A景区呢&#xff0c;应该还有很多人不知道。本文用Python进行可视化&#xff0c;告诉你答案。 …

【五一创作】【Mycat】Mycat2 Bugs 及修改建议(V1.22_2022-10-13)

Bug 1 : wrapper.conf 数字类型参数配置有误&#xff0c;多了末尾的单位 M https://wrapper.tanukisoftware.com/doc/english/prop-java-initmemory.html wrapper.log 产生警告&#xff1a; WARN | wrapper | 2023/04/20 22:42:00 | Encountered an invalid numerical val…

【Git 入门教程】第八节、Git流程管理

Git是一个非常流行的分布式版本控制系统&#xff0c;它提供了许多强大的功能来帮助开发者管理和协调代码库。在团队协作中&#xff0c;如何使用Git来管理开发流程是非常重要的。本文将介绍一些Git流程管理的最佳实践&#xff0c;包括分支策略、代码审核等。 一、分支策略 在团…

【实战】jenkins api 接口

jenkins api 接口实战 一、Jenkins Api简介二、Jenkins Api 环境准备1、获取所有job接口2、获取所有job名字接口3、获取所有job名字和url接口 三、使用curl调用 获取所有构建队列四、使用curl调用 获取Job信息五、使用curl调用操作Job1、操作Job需要验证crumba、使用token发起接…

时序预测 | MATLAB实现BO-CNN-BiLSTM贝叶斯优化卷积双向长短期记忆网络时间序列预测

时序预测 | MATLAB实现BO-CNN-BiLSTM贝叶斯优化卷积双向长短期记忆网络时间序列预测 目录 时序预测 | MATLAB实现BO-CNN-BiLSTM贝叶斯优化卷积双向长短期记忆网络时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 基于贝叶斯优化卷积双向长短期记忆网络…

GPT-3.5 也能直接联网了

ChatGPT 常令人诟病的一个问题&#xff0c;就是它的模型训练数据&#xff0c;迄今为止用的还是 2021 年的老数据。 对于当下这个信息大爆炸时代&#xff0c;相隔两小时&#xff0c;消息都有可能滞后&#xff0c;更别说相隔两年了。 目前正式开放了 Web Browsing 这款插件。 …