正则表达式(4):连续次数的匹配

正则表达式(4):连续次数的匹配

      • 小结

本博文转载自

在本博客中,”正则表达式”为一系列文章,如果你想要从头学习怎样在Linux中使用正则,可以参考此系列文章,直达链接如下:

在Linux中使用正则表达式

“正则”系列的每篇文章都建立在前文的基础之上,所以,请按照顺序阅读这些文章,否则有可能在阅读中遇到障碍。

上一篇正则表达式的文章中,我们总结了跟”位置匹配”有关的正则,此处,我们来认识一些跟”连续次数匹配”有关的正则。

“连续次数匹配”是什么意思呢?空口白话说不容易明白,看完下例就能明白,首先,我们准备一个测试文件,文件内容如下。

在这里插入图片描述
测试文本regex.txt的内容如上图所示。

如果我们想要从regex.txt文本中找出哪些行包含两个连续的字母a,我们应该怎样去查找呢?我们可以使用如下方法

在这里插入图片描述
没错,我们直接使用grep命令,在文本中搜索”aa”即可,因为”aa”就是两个连续的a字母。

可以看到,文本中的第二行和第三行中都包含两个连续的a,所以第二行与第三行被打印了出来。

但是,如果我们要在文本中搜索10个连续的a字母呢?好吧,我们可以搜索”aaaaaaaaaa”字符串

如果我们想要在文本中搜索100个连续的a字母呢?难道还要写100个连续的a?这样显然有点累,我们可以利用正则解决这个问题,示例如下。

利用grep命令和正则表达式,即可找出哪些行包含2个连续的字母a ,示例如下

在这里插入图片描述

聪明如你一定看懂了,没错,”\{2\}”就表示”连续出现2次”,所以,”a\{2\}”就表示a连续出现两次,可以看到,包含2个连续字母a的行只有第二行,所以,当我们使用正则表达式”a{2}”时,只能匹配到第二行,由于第一行中的两个字母a中间存在”空格”,所以并不能算作两个连续的字母a,所以没有被匹配到。

你肯定已经学会举一反三了,”\{2\}”表示连续出现2次,那么,”\{5\}”就表示连续出现5次,”\{100\}”就表示连续出现100次,没错,我们只要替换其中的数字,即可表示连续出现几次。

我们总结一下刚才的语法

使用\{x\}表示之前的字符连续出现x次将会被匹配到。

不过需要注意,如果字符连续出现的次数大于指定的次数,也是可以被匹配到的,示例如下:

在这里插入图片描述

正则表达式中,我们指定,b字母连续出现2次则会被匹配到,所以,第4行被匹配到了,同时,第5行也被匹配到了,因为第5行中,b字母连续出现了3次,包含2次,所以,前2个连续的字母b也被匹配到了。

如果你不想出现上述情况,只是想要精准的匹配连续出现2次且只出现了2次的字母b,应该怎么办呢?其实我们在前文中已经学到了解决问题的方法,示例如下

在这里插入图片描述

没错,就是结合了上次介绍到的单词定界符,锚定词首与锚定词尾,如果你没有看出来上述正则表达式什么意思,那么请回顾上一篇文章。

那么现在,我们来
延伸一下,你来猜猜”\{x,y\}”表示什么?

“\{x,y\}”表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到,换句话说,只要之前的字符连续出现的次数在x与y之间,即可被匹配到,示例如下。

在这里插入图片描述

如上图所示,连续出现2次的d字母、连续出现3次的d字母、连续出现4次的d字母都被匹配到了。

好了,现在我们已经了解了两种语法。

\{x\} 表示之前的字符连续出现x次时会被匹配到。

\{x,y\} 表示之前的字符至少连续出现x次,至多连续出现y次,都可以被匹配到,x与y之间用逗号隔开。

那么,我们再延伸一下,你猜猜… \{x,\} 与\{,y\} 分别表示什么意思?

没错,你肯定已经猜到了

\{x,\}表示之前的字符至少连续出现x次,或者连续出现次数大于x次,即可被匹配到,上不封顶。

\{,y\}表示之前的字符至多连续出现y次,或者连续出现次数小于y次,即可被匹配到,最小次数为0次,换句话说,之前的字符连续出现0次到y次,都会被匹配到。

示例如下:

在这里插入图片描述

如上图所示,字母d连续出现2次以及2次以上的都被匹配到了。

在这里插入图片描述

如上图所示,abc、abcc都被匹配到了,因为”c\{,2\}”表示只要c字母连续出现的次数小于等于2,即可被匹配到,再配合之前的”ab”字符,所以,abc

、abcc都被匹配到了, ab为什么也被匹配到了呢?之前说过,”\{,y\}”表示之前的字符连续出现0次到y次,都会被匹配到,所以,ab被匹配到了,相当于c被匹配到了0次。

现在我们再来认识一个用于匹配次数的正则符号,它就是*

如果你之前使用过通配符,那么你肯定对*非常熟悉,在通配符中,*表示匹配任意长度的任意字符。

但是,在正则表达式中,*代表另一个意思,在正则表达式中,表示之前的字符连续出现任意次数(包括0次),不要与通配符中的搞混淆了。

示例如下

在这里插入图片描述
如上图所示,”e*f”表示e出现任意次,f必须跟在e的后头。

注意,*表示之前的字符连续出现任意次数,包括0次,即可被匹配到,理解了这一点,再看如下示例,就简单了。

在这里插入图片描述

如上图所示,”d*”表示d连续出现任意次数,即可被匹配到,所以,第7行高亮显示了。

但是其他行为什么也被打印出来了呢?这是因为*表示连续出现任意次数,包括0次。

其他行中,根本不包含字母d,换句话说就是,d连续出现了0次,所以其他行也符合条件,最终也被grep输出了。

那么,在通配符中,*表示匹配任意长度的任意字符,在正则中,怎样表示任意长度的任意字符呢?

在正则表达式中,使用”.*”表示任意长度的任意字符。

我们先看示例,回头再解释为什么”.*”表示任意长度的任意字符,示例如下。

在这里插入图片描述

上图中的正则表达式表示,a字母后面存在任意长度的任意字符,都可以被匹配到,如上图所示,的确都被匹配到了。

其实,在正则表达式中,”.”表示匹配任意单个字符,示例如下。

在这里插入图片描述

如上图所示

“ee.”表示”ee”后面跟随任意一个单个字符,都会被匹配到

“ee…”表示”ee”后面跟随任意两个字符,都会被匹配到,由于”空格”也算作单个字符,所以,”eef空格”也被匹配到了,因为”f”和”空格”被看做了两个字符。

理解完上述示例,再回过头来理解”.”,就容易多了,”.”可以理解为”.”与””的结合,”.”在正则中表示”连续出现任意次的任意单个字符”,换句话说就是,任意长度的任意字符,正则表达式中的”.”与通配符中的””所表达的意思一样。

理解完上述符号以后,再来认识两个新符号,”\?”与”\+”

\?
表示匹配其前面的字符0或1次,换句话说,就是前面的字符要么没有,要么有一个。

\+表示匹配其前面的字符至少1次,换句话说,就是前面的字符必须有至少一个。

我们来看看示例,如下。

在这里插入图片描述

如上图所示,”c\?”表示c出现0次或者1次,都会被匹配到,所以ab和abc都被匹配到了,ab被匹配到是因为c出现了0次,abc被匹配到是因为c出现了1次。

看完上述示例后,再来看另外一个例子,如下:

在这里插入图片描述
可以看到,abc与abcc都被匹配到了,这是因为”c\+”表示c至少要出现1次,至多可以连续出现多次,连续次数上不封顶,所以abc和abcc都会被匹配到。

好了,关于”连续次数匹配”的相关正则表达式就总结到这里吧。

小结


为了方便以后回顾,我们将上述正则总结如下。

* 表示前面的字符连续出现任意次,包括0次。

.  表示任意单个字符。

.* 表示任意长度的任意字符,与通配符中的*的意思相同。

\? 表示匹配其前面的字符0或1次

\+ 表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。

\{n\} 表示前面的字符连续出现n次,将会被匹配到。

\{x,y\} 表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到,
换句话说,只要之前的字符连续出现的次数在x与y之间,即可被匹配到。

\{,n\} 表示之前的字符连续出现至多n次,最少0次,都会陪匹配到。

\{n,\} 表示之前的字符连续出现至少n次,才会被匹配到.

希望这篇文章能够帮助到你,下次再见哦亲~~~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp使用vue-i18n国际化多国语言

前言:uniapp是自带有i18n这个插件的,如果没有npm安装即可 此插件需要自己去给每一个需要国际化的字符去手动配置key,所以如果是已经完成的项目可能工作量就稍微有点大了 第一步: 语言命名是有规范的不能乱取名,具体可…

TCP首部格式_基本知识

TCP首部格式 表格索引: 源端口目的端口 序号 确认号 数据偏移保留 ACK等 窗口检验和紧急指针 TCP报文段首部格式图 源端口与目的端口: 各占16位 序号:占32比特,取值范围0~232-1。当序号增加到最后一个时,下一个序号又回到0。用来指出本TCP报文段数据载…

Linux下如何运行.sh文件

运行环境为ubuntu20.04 如在/home/zoe/map运行.sh文件: 进入到/home/zoe文件夹下: cd /home/zoe/map 第一种运行方式: sh play.sh 结果: 第二种方式: 使用chmod修改文件的执行权限,然后运行 chmod x …

图书馆智能密集书架怎么用的

图书馆智能密集书架是一种高密度存储书籍的设备,通过机器控制和操作,实现了对书籍的高效存储和检索。使用专久智能智能密集书架的方法如下: 1.先进行授权认证,确认身份和权限,进行操作前要确保权限正确,以免…

HTTP请求

前言 HTTP是应用层的一个协议。实际我们访问一个网页,都会像该网页的服务器发送HTTP请求,服务器解析HTTP请求,返回HTTP响应。如此就是我们获取资源或者上传资源的原理 HTTP请求报头格式 图片来自网络 HTTP请求报头总体有四部分:…

Gmsh <二>:Mesh generation

上一节主要涉及Gmsh的使用入门和几何模型构建简介中,我们讲了Gmsh构建几何的一些基本知识,下面主要侧重于Gmsh在网格生成方面的操作。 网格生成的不同算法 在Gmsh中,当几何模型构建完成后,我们可以使用函数gmsh.model.mesh.gene…

unity 2d入门飞翔小鸟按钮点击功能且场景切换(二)

1、素材包获取 链接: https://pan.baidu.com/s/1KgCtQ_7wt2mlbGbIaMVvmw 提取码: xxh8 2、将素材全部拉进去 3、创建新的场景 并且将场景添加到build settings里面 4、脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityE…

Python的海龟 turtle 库使用详细介绍(画任意多边形,全网最详细)

学Turtle库,其实就是学数学,而且还能提高对数学和学习的兴趣。Turtle库还能够帮助孩子更好地理解几何学和数学概念,比如角度、比例、几何图形的性质等等,是Python中一个很有趣的库。 前言 Turtle库是Python中一个很有趣的库&…

装修流程篇

装修流程 https://www.xiaohongshu.com/explore/627ba70d00000000210357b3 https://www.xiaohongshu.com/explore/63b6bc0c000000002203776f 半包装修流程 https://www.xiaohongshu.com/explore/64e5ea3b0000000003021711 户型图 效果 https://www.xiaohongshu.com/ex…

5G承载网和大客户承载的演进

文章目录 移动4/5G承载网联通和电信4/5G承载网M-OTN(Metro-optimized OTN),城域型光传送网PeOTN(packet enhanced optical transport network),分组增强型OTN板卡增强型PeOTN集中交叉型PeOTN VC-OTN&#x…

CoreDNS实战(六)-编译安装unbound插件

本文主要介绍coredns的unbound插件进行编译安装的过程及常用的配置方法。 coredns官方的unbound文档:unbound unbound插件的github地址:https://github.com/coredns/unbound 注:unbound插件虽然是coredns中的External Plugins,但…

如何使用llm 制作多模态

首先将任何非字符的序列信息使用特殊n个token 编码。 具体编码方法以图像为例子说明: 将固定尺寸图像如256256 的图像分割为1616 的子图像块。 将已知的所有图像数据都分割后进行str将其看做是一个长的字符,而后去重后方式一个词表。 使用特殊1024 个tok…

GNN Maximum Flow Problem (From Shusen Wang)

Maximum Flow Problem ShusenWang 图数据结构和算法课程笔记 Slides Maximum Flow Problem Description Naive Algorithm Residual Capacity - FlowLeft: Original GraphRight: Residual Graph - Bottleneck capacity 2- Iteration 2:- Find an augmenting path: s -&g…

IntelRealSense深度相机D455在ROS1运行中的消息内容

IntelRealSense深度相机D455在ROS1运行中的消息内容 通过下面命令所有相关信息通过ros topic的方式发布出去rosnode查看rqt_graph查看rostopic查看通过下面命令直接查看RVIZ中点云信息rosnode查看rqt_graph查看rostopic查看 Physical Port:: /sys/devices/pci0000:0…

线性回归既是一种数据挖掘与建模算法,也是统计学领域、计量经济学领域的常用学术建模方法,有何不同?

一.线性回归的基本形式 线性回归既是一种数据挖掘与建模算法,也是统计学领域、计量经济学领域的常用学术建模方法。在数据挖掘与建模领域,线性回归算法是一种较为基础的机器学习算法,其基本思想是将响应变量(因变量、被解释变量&…

协议栈的内部结构

上层会向下层逐层委派工作。 最上面的部分是网络应用程序,它们会将收发数据等工作委派给下层的部分来完成。尽管不同的应用程序收发的数据内容不同,但收发数据的操作是共通的。 应用程序的下面是Socket库,其中包括解析器,解析器…

Java+Swing+Mysql实现超市管理系统

一、系统介绍 1.开发环境 操作系统:Win10 开发工具 :IDEA2018 JDK版本:jdk1.8 数据库:Mysql8.0 2.技术选型 JavaSwingMysql 3.功能模块 4.系统功能 1.系统登录登出 管理员可以登录、退出系统 2.商品信息管理 管理员可以对商品信息…

Windows下安装Git和Git小乌龟

目录 Git简介 Git安装 Git小乌龟简介 Git小乌龟安装 Git简介 Git是一个开源的分布式版本控制系统,可以有效、高速地进行从很小到非常大的项目的版本管理。Git支持将本地仓库与远程仓库进行关联,实现多人协作开发。由于具有分布式版本控制、高效性、灵…

掌握Python Pingouin:数据统计新利器解析!

更多资料获取 📚 个人网站:ipengtao.com Pingouin库基于pandas、scipy和statsmodels,为用户提供了执行常见统计分析的功能。它支持各种统计方法和假设检验,例如 t-tests、ANOVA、correlation analysis 等。让我们看一些示例代码&…

打表技巧—连续正数和

与其明天开始,不如现在行动! 文章目录 连续正数和1 题目描述2 解决思路3 代码实现 💎总结 连续正数和 1 题目描述 定义一种数:可以表示成若干 (数量>1) 连续正数和的数比如: 5 23,5就是这样的数 12345,12就是这样…