10. 正则表达式

news/2025/2/5 18:58:01/文章来源:https://www.cnblogs.com/FlurryHeart/p/18699997

一、什么是正则表达式

  正则表达式(regular expression)又称 规则表达式,是一种文本模式(pattern)。正则表达式使用一个字符串来描述、匹配具有相同规格的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式的核心功能就是处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

二、基础语法

2.1、转义字符

  使用正则表达式去检索某些特殊字符的时候,需要用到转义字符,否则检索不到结果,甚至会报错;在 Shell 中,$ 具有取变量值的作用,如果我们要在普通字符串中使用 $,需要使用 \ 进行转义。由于在 Shell 字符串字面量中反斜杠是一个转义字符,所以在构建模式串时,你需要使用两个反斜杠来表示一个反斜杠。

echo "abc\$def(123\(456))" | grep "\\\(456"
echo "abc\$def(123\(456))" | grep "\$def"

转义字符

在 Shell 字符串字面量中,反斜杠本身也是一个转义字符,所以我们需要使用两个反斜杠 \\ 来表示一个真正的反斜杠 \

2.2、字符匹配符

字符匹配符 含义 实例 解释
[] 可接收的字符列表 [abc] a、b、c 中的任意 1 个字符
[^] 不可接收的字符列表 [^abc] 除 a、b、c 之外的任意 1 个字符
包括数字和特殊符号
- 连字符 a-z 任意一个小写字母
echo "abc123def456AbC" | grep "[abc]"
echo "abc123def456AbC" | grep "[^abc]"
echo "abc123def456AbC" | grep "[a-z]"

字符匹配符

2.3、元字符

元字符 含义
. 匹配单个除换行符以外的任意字符
\d 匹配 0~9 任意一个数字
\D 匹配单个任意非数字字符
\s 匹配任意空白字符
\S 匹配任意不是空白符的字符
\w 匹配字母或数字或下划线的任意字符
\W 匹配任意不是字母、数字、下划线的字符
echo "abc123def4567AbC" | grep -P "\d\d\d"
echo "abc123def4567AbC" | grep -P "\d\w"

元字符

元字符的大写表示不匹配;

2.4、重复限定符

  重复限定符用于指定其前面的字符和组合项连续出现多少次。

重复限定符 意义
? 0 次 或 1 次
* 0 次 或 多次
+ 1 次 或 多次
{n} 正好出现 n 次
{n,} 至少出现 n 次
{n,m} 出现 n 次 至 m 次
echo "abc123def4567Abc89d115200a1" | grep -P "\d{3,5}"
echo "abc123def4567Abc89d115200a1" | grep -P "\d+"

重复限定符

2.5、定位符

  定位符,用来指定要匹配的字符串出现的位置。

定位符 含义
^ 指定起始字符
$ 指定结束字符
\b 匹配目标字符串的边界,
边界指的是字串间有空格,或者目标字符串的结束位置
\B 匹配非单词边界
echo "abc123 def4567abc123abc abc89 d115200 a1abc" | grep "^abc"
echo "abc123 def4567abc123abc abc89 d115200 a1abc" | grep "abc$"
echo "abc123 def4567abc123abc abc89 d115200 a1abc" | grep "abc\b"
echo "abc123 def4567abc123abc abc89 d115200 a1abc" | grep "ab\B"

定位符

2.6、选择匹配符

  正则表达式用符号 | 来表示或,也叫做分支条件,当满足正则表达里的分支条件的任何一种条件时,都会当成匹配成功。

echo "你好啊,小樱同学,欢迎你加入小樱班,从现在开始你就是我的朋友啊,小樱同志,请多多关照。" | grep -P "小樱同学|小樱同志"

选择匹配符

2.7、贪婪匹配

  当 ? 元字符紧随任何其它限定符 (*、+、?、{n}、{n,}、{n,m})之后,匹配模式是 “贪婪匹配”。贪婪匹配搜索到、尽可能长的字符串。

echo "abc111111abc" | grep -P "\d{3,5}"

贪婪匹配

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

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

相关文章

独立开发经验谈:我是如何借助 Docker 环境变量让客户 1 分钟上线客服系统的

通过 Docker 环境变量,在启动容器时带入配置信息,自动写入配置文件中,完全免去了进入容器内部 vim 修改的步骤,真正实现在线客服系统1分钟上线。我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统。陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上…

线段树详解

授人以鱼不如授人以渔本文尽量详细地讲述线段树的引入,实现,应用,以及相关进阶知识。 引入 引入线段树通用的例子: 给定一组整数\(nums\),定义两种操作修改列表里的第\(i\)个数据为\(val\) ①查询区间和\([L,R]\) ②为了同时实现两种操作,现在考虑处理\(nums\)的方式 简单…

[Python] 依赖注入的使用,多模块任务隔离

使用google/pinject(依赖注入库)搭建了一个多模块运行、相互隔绝的项目。定义全局单例的依赖注入容器:"""依赖注入容器"""from typing import Any, List, Type, TypeVar import pinject import pinject.findingclass Ioc:"""依…

关于设计模式的一点想法

《设计模式:可复用面向对象软件的基础》书评最早读这本《设计模式:可复用面向对象软件的基础》是在大学的时候。读了一些片段,看到了讲文本编辑器的滚动条装饰,觉得有点意思,可以用来做图形界面。记得有一天晚上上床睡觉后,和两位同寝室室友聊天。一位室友LL说,他为了找…

ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明

容器存储是容器应用运行时的数据保障,本次 ACK 容器存储监控的更新能够帮助用户全面、精细地掌控集群中的存储细节,快速定位业务运行过程中可能出现的 IO 瓶颈和 IO 问题,更好地保证业务的平稳运行。作者:邱圆辉(霜序) 背景 随着容器化应用的日益普及、业务规模的增长以及…

LLM大模型:deepseek浅度解析(三):R1的reinforcement learning复现

deepseek-R1比较创新的点就是reward函数了,其自创的GRPO方法,详解如下:https://www.cnblogs.com/theseventhson/p/18696408训练出了R1-zero和R1两个强化学习版本!幸运的是,GRPO的这个算法已经有人实现,并集成到huggingface啦,直接调用就行,demo在这里:https://gist.gi…

并发编程 - 线程同步(三)之原子操作Interlocked简介

原子操作是不可分割的操作单元,Interlocked提供硬件级别原子操作,比传统锁机制效率高。Interlocked支持多种原子操作,如增减、替换、位操作等,确保多线程安全。上一章我们了解了3种处理多线程中共享资源安全的方法,今天我们将更近一步,学习一种针对简单线程同步场景的解决…

从易用性到高级分析:五款优秀报表软件盘点

本文将为大家介绍五款报表软件,详细描述它们的功能亮点和适用场景。山海鲸报表、Qlik Sense、Looker、Domo和Power BI分别在自助分析、实时数据访问、数据整合、可视化以及人工智能支持等方面展现了强大的功能。这些软件适用于不同规模的企业,能够帮助企业实现数据的可视化、…

阿里云可观测 2024 年 12 月产品动态

阿里云可观测 2024 年 12 月产品动态

pre-norm、post-norm

同一设置之下,Pre Norm结构往往更容易训练,但最终效果通常不如Post Norm参考资料 苏剑林. (Mar. 29, 2022). 《为什么Pre Norm的效果不如Post Norm? 》[Blog post]. Retrieved from https://kexue.fm/archives/9009为什么大模型结构设计中往往使用postNorm而不用preNorm?

连接VNC时出现attempting to reconnect to vnc server

参考 https://blog.csdn.net/weixin_46031767/article/details/128076399 使用VNC View连接kvm虚拟机无法出现画面提示 Attempting to reconnect to VNc Server.. Protocol error: invalid message type 255将画质调低解决该问题

【FMC173】l基于VITA57.1标准的4通道4GSPS AD采集、4通道12GSPS DA回放FMC子卡模块

产品概述 FMC173是一款基于VITA57.1标准的,实现4路12-bit、4GSPS ADC采集功能、4路16-bit 12GSPS DA回放的FMC子卡模块。该模块遵循VITA57.1(HPC)标准,搭配FPGA载板可以灵活的实现多通道高速采集与回放功能。模块的主芯片采用ADI公司高度集成的AD9081芯片,该芯片与ADI公司…