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

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

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

常用的类型有:基础正则(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.mzph.cn/news/5942.shtml

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

相关文章

leetcode 542. 01 矩阵

给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出:[[0,0,0],…

【Unity2D】设置一物体默认在其他物体之上不被遮挡

比如我想让机器人显示在箱子的前面。 点击箱子,将其层级设置在机器人的后面。 即修改箱子的Order in Layer 在机器人之后 物体默认的Order in Layer 都是0 ,将箱子的Order in Layer修改为-1即可 这样将确保先绘制机器人,然后绘制箱子。这样…

C#鼠标拖拽,移动图片实例

最近工作需要做一个鼠标可以拖拽移动图片的功能。 写了几个基本功能,勉强能用。这里记录一下。欢迎大神补充。 这个就是完成的功能。 下边的绿色是一个pictureBox,白色框也是一个pictureBox,他们二者是子父级关系。 绿色是父级&#xff0c…

NAS私有云存储 - 搭建Nextcloud私有云盘并公网远程访问

文章目录 摘要视频教程1. 环境搭建2. 测试局域网访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问 4 配置固定http公网地址4.1 保留一个二级子域名4.1 配置固定二级子域名4.3 测试访问公网固定二级子域名 摘要 Nextcloud,它是ownCloud的一个分支,是一个文…

【《Spring Boot微服务实战(第2版)》——一本关于如何在Spring Boot中构建微服务的全面指南】

使用Spring Boot框架构建基于Java的微服务架构,将应用程序从小型单体架构蜕变为由多个服务组成的事件驱动架构。这个最新版本围绕服务发现、负载均衡、路由、集中式日志、按环境配置和容器化等知识点,循序渐进地讲述微服务架构、测试驱动的开发和分布式系…

Mysql 主从复制、读写分离

目录 一、前言: 二、主从复制原理 2.1 MySQL的复制类型 2.2 MySQL主从复制的工作过程; 2.2.1 MySQL主从复制延迟 2.3 MySQL 有几种同步方式: 三种 2.3.1、异步复制(Async Replication) 2.3.2、同步复制(Sync Re…

centos逻辑分区磁盘扩展

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

力扣 -- 918. 环形子数组的最大和

一、题目: 题目链接:918. 环形子数组的最大和 - 力扣(LeetCode) 二、解题步骤: 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 三、参考代码&#xff1…

PCL点云处理之最小二乘直线拟合(2D| 方法2)(❤亲测可用❤)(二百零一)

PCL点云处理之最小二乘直线拟合(2D| 方法2)(❤亲测可用❤)(二百零一) 一、算法简介二、算法实现1.代码2.结果一、算法简介 在二百章中,我们介绍了一种最小二乘拟合直线点云(2D)的方法,可以获取直线方程系数k,b,这里介绍另一种拟合直线点云的方法,更为简单方便,结果…

MGRE之OSPF实验

目录 题目: 步骤二:拓扑设计与地址规划​编辑 步骤三:IP地址配置 步骤四:缺省路由配置 步骤五:NAT的配置 步骤六:MGRE配置 中心站点R1配置 分支站点配置 中心站点R5 R1配置 分支站点配置 检测&…

S32K1xx SDK(版本:S32_SDK_S32K1xx_RTM_4.0.3 )详细介绍

前言 在学习一款MCU之前,一般我的习惯是先下载官方提供的SDK包进行学习。然后学习了解SDK提供的资源、框架、以及各目录结构文件作用等,下面边学边做笔记记录。 S32K1系列SDK我们可以到下面的NXP官网去获取: https://www.nxp.com.cn/design…

微服务如何治理

微服务远程调用可能有如下问题: 注册中心宕机; 服务提供者B有节点宕机; 服务消费者A和注册中心之间的网络不通; 服务提供者B和注册中心之间的网络不通; 服务消费者A和服务提供者B之间的网络不通; 服务提供者…

一、二维前缀和算法

文章目录 前缀和模板724. 寻找数组的中心下标238. 除自身以外数组的乘积560. 和为 K 的子数组974. 和可被 K 整除的子数组525. 连续数组1314. 矩阵区域和 前缀和模板 一维前缀和: import java.util.*;public class Main {public static void main(String[] args) …

香橙派Zero2安装wiringPi外设库

安装wiringOP库 直接在香橙派上下载 wiringOP 的代码 sudo apt update sudo apt install -y git git clone https://github.com/orangepi-xunlong/wiringOP 如果在香橙派上下载不下来,也可以在通过windows浏览器打开https://github.com/orangepi-xunlong/wiringOP …

ffplay播放器剖析(4)----音频输出和音频重采样流程

文章目录 1. 音频输出模块1.1 音频输出流程1.2 音频输出模型图 2. 打开SDL音频设备audio_open详解sdl_audio_callbackaudio_decode_frame 3. 音频重采样样本补偿 1. 音频输出模块 1.1 音频输出流程 打开SDL音频设备,设置参数启动SDL音频设备播放SDL音频回调函数读取数据,也就…

八、HAL_UART(串口)的接收和发送

1、开发环境 (1)Keil MDK: V5.38.0.0 (2)STM32CubeMX: V6.8.1 (3)MCU: STM32F407ZGT6 2、UART和USART的区别 2.1、UART (1)通用异步收发收发器:Universal Asynchronous Receiver/Transmitter)。 2.2、USART (1)通用同步异步收发器:Universal Syn…

Rust 数据类型 之 类C枚举 c-like enum

目录 枚举类型 enum 定义和声明 例1:Color 枚举 例2:Direction 枚举 例3:Weekday 枚举 类C枚举 C-like 打印输出 强制转成整数 例1:Weekday 枚举 例2:HttpStatus 枚举 例3:Color 枚举 模式匹配…

ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析

一、 空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 二、 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化:地图符号与注记 …

Kubernetes集群故障排查—审计

Kubernetes 审计(Auditing) 功能提供了与安全相关的、按时间顺序排列的记录集, 记录每个用户、使用 Kubernetes API 的应用以及控制面自身引发的活动。 审计功能使得集群管理员能够回答以下问题: 发生了什么?什么时候…

算法竞赛备赛之经典数据结构训练提升,暑期集训营培训

1.链表与邻接表:树与图的存储 我们将结构体和指针结合来实现链表 struct Node {int val;Node * next; }; ​ new Node;//这样创建结点是相当慢的 我们算法主要是用数组来模拟链表,这样效率会高一些。 数组模拟单链表 邻接表:存储图和树 实…