关于正则表达式的简单介绍以及使用

news2024/11/25 15:44:59

一、介绍
正则表达式通常被用来检索匹配某种模式(规律)的文本

日常文本检索,如果单纯检索某个数字,字母,或者单词匹配出来的结果较多,而面对目标文件内容较大的时,我们也不可能肉眼对检索出来的一行行里去找到自己想要的文本,所以这时候使用正则就能大大减少我们检索文本信息的所花费的时间。

常用的类型有:基础正则(BRE)和扩展正则(ERE)

二、语法
1、普通字符

判断一个长度为1的字符串是否是数字
使用代码就是
if (num==“0” or num==“1” or ...num==“9”)      /*麻烦的要死*/

换成正则,就可以写成 [0123456789]
"[]"表示一个字符组,代表一位字符,只要匹配的字符串里有方括号里任何一位字符就算匹配成功

当然这样写还是有点长度,如果引用多次这个表达式,文本也会显得臃肿,

所以书写上还可进一步简化
[0-9]                    /*连续的就可以用-加上起始字符和终止字符*/
这样轻易就能看出其意思,书写起来也方便

同样字母就是[a-z]、[A-Z],比如我要匹配xyz中一个字符就是[xyz]
最常见的匹配输入是yes或者Yes ,那表达式就可以是 [Yy]es

2、字符转义
针对表示特殊意义的字符,去其本身字面字符
就单纯字面意思,学习编码语言也学过,不再赘述,通用办法就是使用“\"进行转义
例如刚我们说的[0-9]表示就是0到9之间的任何一个数字字符,那我们就是想要字面字符的意思,表示”0“,”-“,”9“中的一个字符,那就是[0\-9]

3、元字符
在正则中有特殊意义的字符
常见元字符如下:
        \ 将下一个字符标记为特殊字符按或字面指,如n匹配字符,\n匹配换行符
        ^ 匹配输入的开始部分 ,如以a开头的字符串,^a......
        $ 匹配输入的结束部分,如以z结尾的字符串,......z$
        * 匹配零次或多次前面的字符,如zo*匹配z、zo、zoo
        + 匹配一次或多次前面的字符,如zo+匹配zo、zoo
        ?匹配零次或一次前面的字符,如z?oo 匹配oo、zoo
        . 匹配单个字符,换行符除外
        x|y 匹配x或y,如,z|zoo 匹配z、zoo,(z|w)oo 匹配zoo、woo
        {n} n是一个非负整数,精确匹配c次前面的字符,用法与*,+,?类似
        {n,} 至少匹配n次前面的字符
        {n,m} 至少匹配n次且至少匹配m次前面的字符
        [xyz] 匹配下x,y,z中任一个字符
        [^xyz] 匹配任何一个不是x,y,z的字符,同理还有[a-z]、[^a-z]
        \b 匹配某个单词边界,即某个单词和空格之间的位置,如\bsa匹配he said 里的sa
        \B 匹配非单词边界,如ea*r\B匹配never early中的ear
        \d 匹配数字字符,等价于[0-9]
        \D 匹配非数字字符
        \f 匹配换页字符
        \n 匹配换行符
        \r  匹配回车字符
        \s 匹配任何空白字符,包含空个、制表符、换页字符等
        \S 匹配任何非空白字符
        \t 匹配跳进字符
        \v 匹配垂直跳进字符
        \w 匹配任何单词字符,包含下划线,类似于[a-zA-Z0-9_]
        \W 匹配任何非单词字符,类似于[^a-zA-Z0-9_]

4、限定符
指定输入中必须存在字符、组或字符类的多少个实例才能找到匹配项,可以理解为次数,如上文讲述到的{2}匹配前面字符2次,常见限定符有:*、+、?、{n}、{n,}、{n,m}

5、定位符
定位符能够将正则表达式固定到行尾或行首,用来描述字符串或单词的边界,常见定位符有:^、$、\b、\B

这里讲两个关于边界的定位符例子:
"area bare arena mare"  使用正则”\bare\w*\b" 去匹配,会得到“area" ,"arena" ,”\bare\w*\b" 以“边界+以are开头的单词+边界”去匹配

“equity queen equip acquaint quiet” 使用正则“\Bqu\w+"去匹配,会得到”equity“,”quip“,”quaint “,以qu开头非边界的单词

6、分组构造
正则表达式的子表达式,用于捕获输入字符串的子字符串,使用(子表达式)表示,有点像数据基础运算里括号的意思,使用括号将多个元字符表达式组合成一个对象,并且可以针对这个对象使用限定符和定位符。


“He said that that was the correct answer."  使用表达式”(\w+)\s(\w+)\W"匹配=>"He said ","that that ","was the ","correct answer."
/*单词+空格+单词+非单词字符*/

7、匹配模式
匹配的时候使用的规则,常见有:不区分大小写模式,单行模式,多行模式。
单行模式(点号通配)改变元字符"."的匹配模式,“."默认匹配所有字符,但不包括换行符"\n",而单行模式下"."可以匹配任何字符。
多行模式改变的是"^"和"$"的匹配模式,默认模式下 "^"和"$"匹配的是整个字符串的起始位置和结束位置,而在多行模式,它们会匹配字符串内部某一行文本的起始位置和结束位置。
/*多行的字符串即内包含"r""\n"的字符串*/\

三、基础/扩展正则的常见元字符

基础正则表达式:"^","$",".","*","\","[abc]","[^abc]","[a-d]"

再加上一些特殊字符匹配特定类型的字符:
        [[:alpha:]] 匹配任何字母字符,无论大小写
        [[:alnum:]] 匹配任何字符和数字字符
        [[:blank:]] 匹配空格或制表符
        [[:digit:]] 匹配0-9之间的数字
        [[:lower:]] 匹配任意小写的字母字符
        [[:upper:]] 匹配任意大写的字母字符
        [[:print:]] 匹配任意可打印的字符
        [[:punct:]] 匹配任意标点符号
        [[:space:]] 匹配任意空白字符

扩展正则表达式:x|y,+,?,(pattrn),{n,m}

四、正则表达式的使用

1、grep命令
语法:grep+正则表达式+文件名
在这里插入图片描述
grep -o 仅展示捕获到的内容
grep -E 使用扩展正则表达式去捕获

 

2、sed命令
语法 sed -n '/正则表达式/p'
 -n 参数使sed命令只显示匹配命中的一行
 p :打印,亦即将某个选择的数据印出
在这里插入图片描述
3、gawk命令
语法:gawk '/正则表达式/{print $0}'
正则范围:为扩展正则表达式
$0 代表整个文本
$N 代表文本行中的第N个数据字段
在这里插入图片描述

 

五、生活中常用的正则表达式
1、账号是否合法(5-16字节)
^[a-zA-Z]\w{4,16}$
2、身份证号码
^[1-9]\d{5}[1|2]\d{3}((0\d)|1[0-2])([0-2]\d|3[0-1])\d{3}[0-9Xx]$
3、手机号码
^1([358]\d|4[579]|66|7[0135678]|9[89])\d{8}$
4、IP地址
((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))
5、email地址
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

#该文章为日常学习所记录,若有不合理地方,欢迎指教,谢谢

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

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

相关文章

Kotlin 新版本 1.9.0重要更新预览

释放 Kotlin 新版本 1.9.0 的强大功能 1. Kotlin K2编译器用于多平台 对K2编译器进行了进一步的改进,使其更加稳定。K2编译器针对JVM目标现已进入Beta版本,并且也可以在多平台项目中使用。 您可以通过将K2配置添加到项目的gradle.properties中&#x…

pytest-allure 生成测试报告

目录 前言: pytest 中 yield 和 return 的区别和相同点 共同点 区别 usefixtures 与传 fixture 区别 Pytest 常用的插件 一键安装多个模块 前言: 在软件测试中,生成清晰、易读的测试报告是非常重要的。pytest-allure是一个流行的测试…

centos逻辑分区磁盘扩展

最近碰到服务器磁盘空间不足,需要扩展逻辑分区的需求,特地做下小笔记,方便后续自己回忆。下图是磁盘的相关概念示意图: 1、查看磁盘空间 [rootlocalhost ~]# df -h #查看磁盘空间,根分区的大小是18G,已经用…

微服务——Eureka和Nacos

目录 提供者和消费者 ​编辑 Eureka注册中心——远程调用的问题 Eureka注册中心——原理分析 Eureka注册中心——搭建eureka服务 步骤: Eureka注册中心——服务注册 Eureka注册中心——服务发现 总结 Ribbon负载均衡——原理 流程: Ribbon负载均衡——策略 Ribbon负载均衡—…

ChatGPT:人工智能语言模型的革命性进步

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

idea中回退远程push过的提交(详细图文操作)

目录 git基本知识回顾git中本地文件保存的3个地方工作区暂存区本地仓库代码提交到远程仓库的流转 reset命令的3个参数softmixedhard 具体操作模拟两次提交远程分支回退到第一次提交第一次reset hard第二次reset soft/mixed git基本知识回顾 git中本地文件保存的3个地方 工作区…

CSS :nth-child

CSS :nth-child :nth-child 伪类根据元素在同级元素中的位置来匹配元素. CSS :nth-child 语法 值是关键词 odd/evenAnB最新的 [of S] 语法权重 浏览器兼容性 很简单的例子, 来直觉上理解这个伪类的意思 <ul><li class"me">Apple</li><li>B…

陪诊小程序搭建|陪诊接单平台开发|医疗陪诊小程序

陪诊小程序是一种提供陪同就诊服务的在线平台&#xff0c;具有广阔的发展前景。下面是对陪诊小程序发展前景的介绍&#xff1a;   随着社会的发展和人们生活水平的提高&#xff0c;人们对医疗服务的需求也越来越高。然而&#xff0c;由于工作繁忙、时间紧张等原因&#xff0c…

【C++】通过栈和队列学会使用适配器和优先队列学会仿函数的使用

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

网络超时导致namenode被kill的定位

交换机升级导致部分网络通信超时, 集群的namenode主从切换后,主namenode进程被杀死。 网络问题导致namenode与zk间的连接超时触发了hadoop集群的防脑裂机制而主动kill掉了超时的namenode进程。 日志分析发现zk和namenode之间的网络连接超时: 超时触发了namenode切换,并将超时…

flex布局进阶

推荐看一下阮一峰老师的flex布局博客【Flex 布局教程&#xff1a;语法篇】(https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html#)&#xff0c;讲的非常清晰。 一、多行布局大小相同的子盒子技巧 使用弹性布局实现多行均匀布局时&#xff0c;如若子盒子数量不能被每行…

AI Chat 设计模式:9. 命令模式

本文是该系列的第九篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 介绍下命令模式A.1Q.2 详细说说命令模式适用于啥场景呢A.2Q.3 举一个命令模式的例子&a…

网络知识点之-BGP协议

边界网关协议&#xff08;BGP&#xff09;是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议&#xff0c;也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系…

SQL 连接(JOIN)

SQL 连接&#xff08;JOIN&#xff09;是一种用于将两个或多个表中的数据相互匹配的操作&#xff0c;从而形成一个新的数据集合。JOIN 操作常用于查询和分析数据库中的数据&#xff0c;可以根据不同的连接方式返回不同的结果集。 SQL join 用于把来自两个或多个表的行结合起来…

明解STM32—GPIO理论基础知识篇之寄存器原理​

一、前言 在之前的STM32的GPIO理论基础知识中&#xff0c;分别对基本结构和工作模式进行了详细的介绍。GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析&#xff1b;GPIO工作模式中主要介绍GPIO应用在不同的使用场景下&#xff0c;GPIO端口的静态特征配置和动态的…

FinClip 小程序桌面端商店上线啦

随着技术的不断进步和用户需求的增长&#xff0c;移动应用程序市场日益蓬勃发展。 然而&#xff0c;开发者们面临着一个严峻的挑战&#xff1a;“如何在不同的操作系统上开发和发布应用程序&#xff0c;以满足不同用户群体的需求&#xff1f;”在这方面&#xff0c;使用小程序…

【C++】深层次了解继承,从基础概念到复杂菱形继承问题(文章结尾有菱形继承常见面试题)

1.继承的概念及定义 继承的概念 继承是面向对象设计使代码可以复用的重要手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生的类&#xff0c;称为派生类。 继承的概念并不是固定的&#xff0c;只要能够通过自己的语言…

浅聊webpack的工作原理

参考文献: https://webpack.docschina.org/concepts/ 简述一下 WebPack 是一个模块打包工具&#xff0c;可以使用 WebPack 管理模块。在 webpack 看来&#xff0c;项目里所有资源皆模块&#xff0c;分析模块间的依赖关系&#xff0c;最终编绎输出模块为 HTML、JavaScript、CS…

C++OpenCV(5):图像模糊操作(四种滤波方法)

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 &#x1f506; OpenCV项目地址及源代码&#xff1a;点击这里 文章目录 图像模糊操作均值滤波高斯滤波中值滤波双边滤波 图像模糊操作 关于图片的噪声&#xff1a;指的是图片中存在的不必要或者多余的干扰数…

MySQL-多表查询-案例1

案例 根据需求完成多表查询的SQL语句的编写将资料汇中准备好的数据的SQL脚本导入到数据库中准备数据中各表的关系如下 具体代码 -- 分类表 create table category(id int unsigned primary key auto_increment comment 主键ID,name varchar(20) not null unique comment 分类名…