正则表达式(5):常用符号

正则表达式(5):常用符号

      • 小结

本博文转载自

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

在Linux中使用正则表达式

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

之前已经总结了怎样利用正则表达式去”匹配位置”或者”匹配连续次数”,此处,我们来总结一下正则中其他的一些常用符号。

在开始学习新知识之前,我们先回顾一下之前使用过的一个符号,它就是”.”

之前说过,在正则表达式中,”.”表示匹配任意单个字符(换行符除外),示例如下。

在这里插入图片描述
示例中的正则表示,只要a字母后面跟随任意3个字符,即可被正则表达式匹配到。

正如上图所示,字母a后面跟随的3个字符可以是”数字”,或者是”字母”,再或者是”符号”,都可以,因为”.”表示任意单个字符,”任意”就体现在这里了。

如果我们想要更加”细致”一些呢?

比如,我们仍然想要从文本中找出a字母后面跟随3个字符的字符串,但是,我们对后面跟随的3个字符有要求,并不能是任意3个字符,而必须是三个字母,我们该怎么做呢?

没错,这个问题会引出我们将要认识的新符号,它就是 “[[:alpha:]]”

在正则表达式中,[[:alpha:]] 表示”任意字母”(不区分大小写)

[[:alpha:]] 这个符号看上去略微有点复杂,但是不要害怕,习惯了就好,其实,”[[:alpha:]]” 可以拆开成几部分去理解,我们后面再聊。

我们先来实验一下,示例如下。

在这里插入图片描述

上例中,”[[:alpha:]]{3}”表示3个连续的任意字母,此处结合了之前的知识,其中”{3}” 表示其前面的字符连续出现3次(如果你没有看懂,请回顾前文),所以,上述正则表达式整体的含义就是, 只有a字母后面跟随了3个字母的字符串才会被匹配到,如果a字母后面跟随的3个字符中包含非字母(数字或符号),就不会被匹配到,正如上图所示。

所以,使用[[:alpha:]]可以匹配到不区分大小写的字母,没错,alpha的读音你应该很熟悉了,就是”阿尔法狗”的”阿尔法”。

那么,我们再”细化”一点,我们不仅要字母a后面跟随的3个字符是字母,我们还要求,这3个字符必须是小写字母,我们该怎么办呢?

我们可以使用另外一个符号,它就是”[[:lower:]]”

[[:lower:]]表示任意小写字母,我们来试试。

在这里插入图片描述

可以看到,只有当a后面的3个字符均为小写字母时,才会被匹配到。

我们已经学会了怎样表示”不区分大小写的字母”和”小写字母”,那么怎样表示”大写字母”呢?

我们可以使用[[:upper:]]表示任意大写字母,示例如下。

在这里插入图片描述
聪明如你,一定已经发现了一些规律,规律就是,我们替换”[[: :]]”中的单词,即可表示不同的含义。

那么我们来看看一些常用的符号都表示什么含义。

[[:alpha:]] 表示任意大小写字母

[[:lower:]] 表示任意小写字母

[[:upper:]] 表示任意大写字母

[[:digit:]] 表示0到9之间的任意单个数字(包括0和9)

[[:alnum:]] 表示任意数字或字母

[[:space:]] 表示任意空白字符,包括”空格”、”tab键”等。

[[:punct:]] 表示任意标点符号

好了,了解了上述符号的含义后,你可以自己创建一个测试文件,进行测试,快点动手试试吧,我相信亲自实验获得的理解肯定更加深刻。

之前,我们使用”[[:lower:]]”表示任意一个小写字母,其实,还有另外一种方法,也能够表示”任意单个小写字母”。

除了”[[:lower:]]”,”[a-z]”也能表示任意一个小写字母,你一定猜出来了,没错,”[a-z]”所表示的意思就是,从a到z的26个小写英文字母中的任意一个。

所以,[a-z]与[[:lower:]]是等价的。

同理,[A-Z]也能表示任意一个大写字母,[A-Z]与[[:upper:]]是等价的,示例如下。

在这里插入图片描述

有了之前的基础,你猜猜,”[a-zA-Z]”表示什么意思?

没错,”[a-zA-Z]”表示任意字母,不区分大小写。

[a-zA-Z]与[[:alpha:]]等效。

同理,[0-9]与[[:digit:]]等效,都表示0到9之间的任意单个数字,示例如下。

在这里插入图片描述

我们已经了解到,[a-z]表示任意一个小写字母,其实,”[a-z]”外侧的方括号有特殊的含义。

方括号在正则中代表什么意思呢?

“[ ]”表示匹配指定范围内的任意单个字符,这样说可能不容易理解,我们来动手实验一下,就能秒懂,示例如下。

在这里插入图片描述

可以看到,字母b后面跟随字母c、或者跟随字母e、或者跟随字母g,都可以被匹配到,”[ceg]”表示c或者e或者g中的任何一个字母都能被匹配到。

那么活学活用,”[Bd#3]”表示什么意思呢?

[Bd#3]表示字符是大写B、或者是小写d、或者是符号#、再或者是数字3,都可以被匹配到,示例如下

在这里插入图片描述

“[ ]”表示匹配指定范围内的任意单个字符,换句话说,就是字符与方括号”[ ]”内的任意一个字符相同,就可以被匹配到。

我们了解了方括号的含义以后,再回过头看之前的符号,会有新发现。

上文说过,[0-9]表示0到9之间的任意一个数字,其实,[0-9]就相当于[0123456789]

同理,[a-z]表示a到z之间的任意一个字母,其实,[a-z]就相当于[abcdefghijklmnopqrstuvwxyz]

之前说过,[[:alpha:]]代表单个任意的字母,前文也提到过,[[:alpha:]]可以拆开去理解,聪颖如你一定想到了,我们可以把[[:alpha:]]拆成两部分理解。

第一部分:最外层的[ ],表示指定范围内的任意单个字符

第二部分:最内层的[:alpha:],表示不区分大小写的字母

所以,当两部分结合在一起时,就变成了[[:alpha:]],就表示任意单个字母(不区分大小写),[[:digit:]]等其他类似符号也可以这样拆开来理解。

我们已经理解了方括号”[ ]”的含义,我们再来认识一个它的孪生兄弟,它就是 “[^ ]”

“[^ ]”表示匹配指定范围外的任意单个字符,注意,它与”[ ]”的含义正好相反。

“[ ]”表示匹配指定范围内的任意单个字符。

如果你觉得不好理解,可以先看示例,示例如下:

在这里插入图片描述

如上图所示,字母f后面跟随的字母只要不是a、c、e、g中的任何一个,即可被匹配到,相当于排除了a、c、e、g这些字母。

所以,”[^ ]”表示匹配指定范围外的任意单个字符

我们之前说过,”^”符号的含义为锚定行首,但是,当它与”[ ]”结合在一起的时候,则没有锚定行首之意,只能把”[^ ]”当做一个整体去看待,可以把此处的 “^”理解为取反。

既然”[ ]”与”[^ ]”是相对的,那么,能不能把[0-9]改写成[^0-9]呢?必须能啊。

“[^0-9]”表示匹配单个非数字字符,与[0-9]的含义这正好相反,示例如下。

在这里插入图片描述
如上图所示,只要字母e后面跟随的字符不是数字,就可以被匹配到。

同理:

[^a-z]表示非小写字母的单个字符可以被匹配到。

[^A-Z]表示非大写字母的单个字符可以被匹配到。

[^a-zA-Z]表示非字母的单个字符可以被匹配到,比如数字或符号。

[^a-zA-Z0-9]表示非字母、非数字的单个字符可以被匹配到,比如符号。

结合之前的理论,你一定想到了,既然[0-9]与[[:digit:]]等效,那么[^0-9]与[^[:digit:]]等效吗?

试试就知道了,如下图所示,的确是等效的。

在这里插入图片描述

举一反三

[^0-9]与[^[:digit:]]等效

[^a-z]与[^[:lower:]]等效

[^A-Z]与[^[:upper:]]等效

[^a-zA-Z]与[^[:alpha:]]等效

[^a-zA-Z0-9]与[^[:alnum:]]等效

其实,不仅[0-9]与[[:digit:]]能够表示数字,还有一些简写格式的符号也能表示数字,比如”\d”

但是,并不是所有的正则表达式处理器都能够识别这些简写格式

示例如下

在这里插入图片描述

如上图所示,默认情况下,grep就无法识别”\d”这种简短格式,所以上图中,没有匹配到任何结果。

如果我们想要让grep能够识别这种简短格式,可以使用-P选项,表示grep使用兼容perl的正则表达式引擎,示例如下。

在这里插入图片描述

我想,有了前面的基础,再理解这些简写格式,应该相对容易了。

所以,此处直接列出一些常用的简写格式的符号,不再赘述了,大家可以动手实验一下。

\d 表示任意单个0到9的数字

\D 表示任意单个非数字字符

\t 表示匹配单个横向制表符(相当于一个tab键)

\s表示匹配单个空白字符,包括”空格”,”tab制表符”等。

\S表示匹配单个非空白字符

小结

为了方便以后回顾,我们将上述知识点总结一下。

如果你不明白下述描述,请回顾上述示例。

.  表示匹配任意单个字符
* 表示匹配前面的字符任意次,包括0次
[  ] 表示匹配指定范围内的任意单个字符
[^  ] 表示匹配指定范围外的任意单个字符[[:alpha:]]  表示任意大小写字母
[[:lower:]]  表示任意小写字母
[[:upper:]]  表示任意大写字母
[[:digit:]]  表示0到9之间的任意单个数字(包括0和9)
[[:alnum:]]  表示任意数字或字母
[[:space:]]  表示任意空白字符,包括"空格"、"tab键"等。
[[:punct:]]  表示任意标点符号[0-9]与[[:digit:]]等效
[a-z]与[[:lower:]]等效
[A-Z]与[[:upper:]]等效
[a-zA-Z]与[[:alpha:]]等效
[a-zA-Z0-9]与[[:alnum:]]等效[^0-9]与[^[:digit:]]等效
[^a-z]与[^[:lower:]]等效
[^A-Z]与[^[:upper:]]等效
[^a-zA-Z]与[^[:alpha:]]等效
[^a-zA-Z0-9]与[^[:alnum:]]等效#简短格式并非所有正则表达式解析器都可以识别
\d 表示任意单个0到9的数字
\D 表示任意单个非数字字符
\t 表示匹配单个横向制表符(相当于一个tab键)
\s表示匹配单个空白字符,包括"空格","tab制表符"等
\S表示匹配单个非空白字符

这篇文章就总结到这里,希望能够帮助到你~~

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWS re:Invent 2023-亚马逊云科技全球年度技术盛会

一:会议地址 2023 re:Invent 全球大会主题演讲 - 亚马逊云科技从基础设施和人工智能/机器学习创新,到云计算领域的最新趋势与突破,倾听亚马逊云科技领导者谈论他们最关心的方面。https://webinar.amazoncloud.cn/reInvent2023/keynotes.html北京时间2023年12月1日00:30-02:…

用23种设计模式打造一个cocos creator的游戏框架----(三)外观模式模式

1、模式标准 模式名称:外观模式 模式分类:结构型 模式意图:为一组复杂的子系统提供了一个统一的简单接口。这个统一接口位于所有子系统之上,使用户可以更方便地使用整个系统。 结构图: 适用于: 当你想为…

【FPGA图像处理实战】- VGA接口与时序详解

VGA接口是一个很有历史的接口,全称为Video Graphics Array(VGA)视频图形阵列,是IBM公司在1987年随着PS/2一起推出的使用模拟信号的一种视频传输标准。 时至今日,这个接口依然还在大量使用,因为这个接口具有成本低、结构简单、应用灵活的优点。 一、VGA接口与电路原理图…

这些Java并发容器,你都了解吗?

文章目录 前言并发容器1.ConcurrentHashMap 并发版 HashMap示例 2.CopyOnWriteArrayList 并发版 ArrayList示例 3.CopyOnWriteArraySet 并发 Set示例 4.ConcurrentLinkedQueue 并发队列 (基于链表)示例 5.ConcurrentLinkedDeque 并发队列 (基于双向链表)示例 6.ConcurrentSkipL…

C练习题13

单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 1.结构化程序由三种基本结构组成、三种基本结构组成的算法是() A.可以完成任何复杂的任务 B. 只能完成部分复杂的任务 C. 只能完…

AUTOSAR汽车电子嵌入式编程精讲300篇-基于加密算法的车载CAN总线安全通信

目录 前言 研究现状 系统架构研究 异常检测研究 认证与加密研究 相关技术 2.1车联网 2.2车载网络及总线 2.2.1 CAN总线基础 2.2.2 CAN总线网络安全漏洞 2.2.3 CAN总线信息安全需求 2.3密码算法 2.3.1 AES算法 2.3.2 XTEA算法 CAN网络建模与仿真 3.1 CAN网络建模…

JavaScript基础知识22——断点调试

哈喽,你好啊,我是雷工! 断点调试是程序猿必备的调错,梳理逻辑的技能;当遇到程序报错,或者程序逻辑理解不了,都可以通过断点调试来辅助解决遇到的问题。 断点调试是程序猿必不可少的技能,本节学习…

【Openstack Train】十六、swift安装

OpenStack Swift是一个分布式对象存储系统,它可以为大规模的数据存储提供高可用性、可扩展性和数据安全性。Swift是OpenStack的一个核心组件,它允许用户将大量的数据存储在云上,并且可以随时访问、检索和管理这些数据。 Swift的设计目标是为了…

第十六届山东省职业院校技能大赛中职组网络安全赛项竞赛正式试题

第十六届山东省职业院校技能大赛中职组网络安全"赛项竞赛试题 一、竞赛时间 总计:360分钟 二、竞赛阶段 竞赛阶段任务阶段竞赛任务竞赛时间分值A、B模块A-1登录安全加固180分钟200分A-2本地安全策略设置A-3流量完整性保护A-4事件监控A-5服务加固A-6防火墙策…

深信服技术认证“SCSA-S”划重点:XSS漏洞

为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

「X」Embedding in NLP|Token 和 N-Gram、Bag-of-Words 模型释义

ChatGPT(GPT-3.5)和其他大型语言模型(Pi、Claude、Bard 等)凭何火爆全球?这些语言模型的运作原理是什么?为什么它们在所训练的任务上表现如此出色? 虽然没有人可以给出完整的答案,但…

金南瓜SECS/GEM C# SDK 快速使用指南

本文对如何使用金南瓜SECS/GEM C# SDK 快速创建一个满足SECS/GEM通信要求的应用程序,只需简单3步完成。 第一步:创建C# .NET程序 示例使用Visual Studio 2010,使用者可以选择更高级版本 Visual Studio 第二步:添加DLL库引用&am…

ThreadX开源助力Microsoft扩大应用范围:对比亚马逊AWS的策略差异

全球超过120亿台设备正在运行ThreadX,这是一款专为资源受限环境设计的实时操作系统。该操作系统在微控制器和小型处理器上表现出色,以极高的可靠性和精确的时间控制处理任务而闻名。 ThreadX曾是英特尔芯片管理引擎的引擎,并且是控制Raspber…

IntelliJ IDE 插件开发 | (二)UI 界面与数据持久化

系列文章 IntelliJ IDE 插件开发 |(一)快速入门 前言 在上一篇文章中介绍了在IDEA下开发、运行和安装插件的基本步骤,因此创建项目等基础步骤不再赘述,本文则开始介绍如何进行 UI 界面的开发以及相关数据的持久化存储&#xff…

unity 2d 入门 飞翔小鸟 飞翔脚本(五)

新建c#脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : MonoBehaviour {//获取小鸟(刚体)private Rigidbody2D bird;//速度public float speed;// Start is called before the first frame up…

强敌环伺:金融业信息安全威胁分析——钓鱼和恶意软件

门口的敌人:分析对金融服务的攻击 Akamai会定期针对不同行业发布互联网状态报告(SOTI),介绍相关领域最新的安全趋势和见解。最新的第8卷第3期报告主要以金融服务业为主,分析了该行业所面临的威胁和Akamai的见解。我们发…

SQL server 根据已有数据库创建相同的数据库

文章目录 用导出的脚本创建相同的数据库导出建表脚本再次建表 一些sql语句 用导出的脚本创建相同的数据库 导出建表脚本 首先,右击要导出的数据库名,依次选择任务-生成脚本。 简介(第一页)处选择下一步,然后来到选择…

反序列化 [网鼎杯 2020 朱雀组]phpweb 1

打开题目 我们发现这个页面一直在不断的刷新 我们bp抓包一下看看 我们发现index.php用post方式传了两个参数上去,func和p 我们需要猜测func和p两个参数之间的关系,可以用php函数MD5测一下看看 我们在响应处得到了一串密文,md5解密一下看看 发…

HBase-架构与设计

HBase架构与设计 一、背景二、HBase概述1.设计特点2.适用场景2.1 海量数据2.2 稀疏数据2.3 多版本数据2.4 半结构或者非结构化数据 三、数据模型1.RowKey2.Column Family3.TimeStamp 四、HBase架构图1.Client2.Zookeeper3.HMaster4.HRegionServer5.HRegion6.Store7.StoreFile8.…

10_企业架构NOSQL数据库之MongoDB

企业架构NOSQL数据库之MongoDB 学习目标和内容 1、能够简单描述MongoDB的使用特点 2、能够安装配置启动MongoDB 3、能够使用命令行客户端简单操作MongoDB 4、能够实现基本的数据操作 5、能够实现MongoDB基本安全设置 6、能够操作安装php的MongoDB扩展 一、背景描述及其方案设计…