Linux- 系统随你玩之--文本、字符串处理摸金校尉--RE

news2024/9/25 3:23:10

文章目录

  • 1、前言
  • 2、正则表达式
    • 2.1、 概述
    • 2.2、 特点
    • 2.3、正则表达式-测试工具
  • 3、知识点
    • 3.1、 正则表达式定义
    • 3.2、 正则表达式的组成
    • 3.3、正则表达式语法支持情况
  • 4、速记理解技巧
    • 4.1、基础正则表达式
    • 4.2、等价
    • 4.3、常用运算符与表达式
    • 4.4、分割语法
      • 4.4.1、例型
      • 4.4.2、例型语法与释义
      • 4.4.3、实操例子释义
  • 5、 结语

1、前言

上文我们讲到文本处理三剑客–grep继任者sed,通过正则表达式达到数据堆中如何快速定位到自己需要的内容。今天我们就更全面深入的讲解正则表达式的方方页面,揭开它的神秘面纱。

2、正则表达式

2.1、 概述

正则表达式又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。
它是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
通常被用来检索、替换那些符合某个模式(规则)的文本。
它并不仅限于某一种语言,但是在每种语言中有细微的差别。

2.2、 特点

正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

  1. 灵活性、逻辑性和功能性非常的强;
  2. 可以迅速地用极简单的方式达到字符串的复杂控制。
  3. 对于刚接触的人来说,比较晦涩难懂。比如: 1\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$

在实际开发中,一般都是直接复制写好的正则表达式.。即便这样我们还是要求会使用正则表达式并且根据实际情况修改正则表达式。比如数字:

 ^[0-9]*$

由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。

2.3、正则表达式-测试工具

正所谓工欲善其事必先利其器! 手上没有几把好用的枪,咋开打。
所以我们需要知道下面几个称手的神兵利器:

http://www.regexpal.com/ 这个网站中,我们可以在线测试正则表达式。
推荐如下2个网站,它除了能够在线测试正则表达式,还包括了一个实例使我们直接测试,用于模仿学习。
https://c.runoob.com/front-end/854/ (重点推荐,可以生成不同语言的代码)
http://regexr.com/
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真阅读本教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题。

3、知识点

3.1、 正则表达式定义

正则表达式 它是通过 使用字符串来描述、匹配一系列符合某个规则的字符串。

3.2、 正则表达式的组成

正则表达式由一些普通字符和一些元字符(metacharacters)组成。

1. 普通字符
大小写字母、数字、标点符号及一些其他符号。

2. 元字符
在正则表达式中具有特殊意义的专用字符。

\:转义字符,\!\n等
^:匹配字符串开始的位置
$:匹配字符串结束的位置
.:匹配除\n之外的任意的一个字符
*:匹配前面子表达式0次或者多次
[list]:匹配list列表中的一个字符
[^list]:匹配任意不在list列表中的一个字符
\{n,m\}:匹配前面的子表达式n到m次,有\{n\}\{n,\}\{n,m\}三种格式,分别表示
表示前面的内容出现n次,
表示前面的内容出现n次以上(含n次),
表示前面的内容出现最少n次最多m次。

3. 扩展元字符

 +:匹配前面子表达式内容出现1次及以上
?:匹配前面子表达式内容出现0次或者1次
():将括号中的字符串作为一个整体
|:以或的方式匹配字条串

3.3、正则表达式语法支持情况

在这里插入图片描述

4、速记理解技巧

4.1、基础正则表达式

.[ ]^$
因为这四个字符是所有语言都支持的正则表达式,所以我在此把这四个作为基础的正则表达式。

正则难理解因为里面有一个等价的概念,这个概念大大增加了理解难度,让很多初学者接触起来会感到一头雾水懵圈,但是我们如果把等价都恢复成原始写法,自己书写正则就超级简单了,就像我们平时讲话一样去写你自己的正则了:

4.2、等价

等价即我们平常讲的等同于的意思,表示同样的功能,用不同符号来书写。

  • ?,*,+,\d,\w 都是等价字符
  • ?等价于匹配长度{0,1}
  • *等价于匹配长度{0,}
  • +等价于匹配长度{1,}
  • \d等价于[0-9]
  • \D等价于[^0-9]
  • \w等价于[A-Za-z_0-9]
  • \W等价于[^A-Za-z_0-9]。

4.3、常用运算符与表达式

  • ^ 开始
  • ()域段
  • [] 包含,默认是一个字符长度
  • [^] 不包含,默认是一个字符长度
  • {n,m} 匹配长度
  • . 任何单个字符(. 字符点)
  • | 或
  • \ 转义
  • $ 结尾
  • [A-Z] 26个大写字母
  • [a-z] 26个小写字母
  • [0-9] 0至9数字
  • [A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
  • , 分割

4.4、分割语法

4.4.1、例型

  • [A,B,E,W] 包含A或B或E或W字母
  • [a,e,c,t] 包含a或e或c或t字母
  • [0,3,5,9] 包含0或3或5或9数字

4.4.2、例型语法与释义

基础语法 “^([]{})([]{})([]{})$”
正则字符串 = “开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束”
?,,+,\d,\w 这些都是简写的,完全可以用[]和{}代替,在(?😃(?=)(?!)(?<=)(?<!)(?i)(?)(+?)这种特殊组合情况下除外。
初学者可以忽略?,*,+,\d,\w一些简写标示符,学会了基础使用再按表自己去等价替换

4.4.3、实操例子释义

下面我们来以一些例子来做说明如下:

字符串;tel:021-0518-66620009111
原始正则:“^tel:[0-9]{1,3}-[0][0-9]{2,3}-[0-9]{8,11}$”

速记理解:开始 “tel:普通文本”[0-9数字]{1至3位}“-普通文本”[0数字][0-9数字]{2至3位}“-普通文本”[0-9数字]{8至11位} 结束"

等价简写后正则写法:“^tel:\d{1,3}-[0]\d{2,3}-\d{8,11}$” ,简写语法不是所有语言都支持。

5、 结语

上面针对正则表达式 讲述了这么多,因它并不仅限于某一种语言,所以在每种语言中都会有细微的差别。
想子解更多关于正则表达式内容可下载 《正则表达式日常使用大全及元字符大全使用说明》

参考资料
1 胡军伟, 秦奕青, 张伟. 正则表达式在Web信息抽取中的应用[J]. 北京信息科技大学学报(自然科学版), 2011, 26(6):86-89.
2 赵兴涛, 王斌君, 刘舒. 正则表达式在文档自动识别中的应用[J]. 中国人民公安大学学报:自然科学版, 2005, 11(04):38-40.


  1. 1-9 ↩︎

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

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

相关文章

Java高手速成 | JSP MVC模式项目案例

MVC模式的核心思想是有效地组合“视图”“模型”和“控制器”。在JSP 技术中&#xff0c;视图是一个或多个JSP页面&#xff0c;其作用主要是向控制器提交必要的数据和为模型提供数据显示&#xff1b;模型是一个或多个Javabean对象&#xff0c;用于存储数据&#xff1b;控制器是…

LifeCycle源码解析

简介 Lifecycle是Jetpack中的一个生命周期组件&#xff0c;可用来感知其他组件&#xff08;如Activity&#xff0c;Fragment&#xff09;生命周期的变化&#xff0c;从而可以保证我们的一些代码操作控制在合理的生命周期内&#xff1b; 如何使用&#xff1f; 添加以下依赖 …

什么是接口、接口测试、接口自动化测试、你分的清楚吗?

目录 前言&#xff1a; 服务端接口测试介绍 什么是服务端&#xff1f; 什么是接口&#xff1f; 什么是接口测试&#xff1f; 为什么要做接口测试&#xff1f; 如何做接口测试&#xff1f; 接口测试自动化介绍 为什么是接口测试自动化&#xff1f; 为什么要做接口测试自…

什么是动态域名解析?域名怎么解析到内网IP

首先说说什么是域名解析&#xff0c;域名解析就是把域名解析成一个ip地址&#xff0c;我们大多数人都喜欢记忆域名&#xff0c;但是机器只认识IP地址&#xff0c;把这个IP地址对应相关域名&#xff0c;这就叫域名解析。动态域名与动态域名解析是相互关联的关系&#xff0c;通过…

项目图床选择

总结&#xff1a; 非隐私图片&#xff1a;使用Github、七牛云(http)、SM.MS图床、路过图床。隐私图片&#xff1a;使用阿里云OSS、七牛云(https)&#xff08;绑定的域名不能丢&#xff09;。 测试环境&#xff08;日常使用&#xff09;自行选择&#xff1b; 生产环境选择阿里云…

03_PyTorch 模型训练[Dataset 类读取数据集]

PyTorch 读取图片&#xff0c;主要是通过 Dataset 类&#xff0c;所以先简单了解一下 Dataset 类。Dataset 类作为所有的 datasets 的基类存在&#xff0c;所有的 datasets 都需要继承它&#xff0c;类似于 C中的虚基 类。这里重点看 getitem 函数&#xff0c;getitem 接收一个…

微信小程序使用canvas生成分享海报功能复盘

前言 近期需要开发一个微信小程序生成海报分享的功能。在h5一般都会直接采用 html2canvas 或者 dom2image 之类的库直接处理。但是由于小程序不具备传统意义的dom元素&#xff0c;所以也没有办法采用此类工具。 所以就只能一笔一笔的用 canvas 画出来了&#xff0c;下面对实现…

(文末有彩蛋,不看白不看)兑现一下之前答应读者的事

大家过年好呀&#xff01;&#xff08;我&#xff09;明天就要开工上班啦&#xff01;在假期的最后一天踢了会球&#xff0c;简单吃点东西&#xff0c;晚上来兑现答应一位读者的事情。开整&#xff01; 前情提要 这篇文章缘起于「开发者」技术交流群中一位读者遇到的问题&…

《树上的男爵》坚持解释不清的理想是疏离,还是自由?

《树上的男爵》坚持解释不清的理想是疏离&#xff0c;还是自由&#xff1f; 伊塔洛卡尔维诺&#xff0c;意大利作家&#xff0c;后现代主义派。 卡尔维诺为“寓言式奇幻文学的大师”。&#xff08;评论家赫伯特密特甘评&#xff09; 吴正仪 译 许多年来&#xff0c;我为一些连我…

【3】SpringBoot基础

//从事微服务开发工作 SpringBoot提供一种快速使用Spring的方式 1、自动化 2、设置多个starter配置依赖比Maven直接管理更便捷 3、内置服务器 总结&#xff1a;自动配置&#xff0c;起步依赖&#xff0c;辅助功能 2.6.11版本的说明书 Spring Boot Reference Documentation…

第九层(8):STL之set/multiset

文章目录前情回顾set/multiset概念区别构造函数赋值函数大小操作函数交换函数插入函数删除函数查找函数统计函数为什么set不可以插入重复数据pair数组pair数组创建怎么样去改变set容器的排序规则下一座石碑&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;一名大一…

智公网:一级消防师要掌握的知识点!

一、建筑物的耐火等级 1、建筑物的耐火等级分为四级&#xff0c;一、二、三、四级。 2、节点缝隙或金属承重构件节点的外露部位&#xff0c;应做防火保护层。 3、民用建筑的耐火等级、层数、长度和面积&#xff0c;一二级最大防火分区的长度250m。多层建筑最大允许建筑面积2…

【gcc/g++/gdb/cmake】命令

文章目录参考资料一、gcc/g/make1 gcc和g的区别2 gcc/g与make区别3 make与cmake区别二、开发环境搭建1 编译器&#xff0c;调试器&#xff0c;CMake安装2 GCC编译器2.1 编译过程2.1.1 -E 预处理-Pre-Processing .i文件2.1.2 -S 编译-Compiling .s文件2.1.3 -C 汇编-Assembling …

软件工程(二)——需求工程、统一建模语言UML

目录 一、需求获取 二、需求分析 1.结构化需求分析 2.面向对象分析方法OOA 三、UML 41视图 四、UML 图 (1)用例图 (2)类图、对象图 (3)顺序图 &#xff08;4&#xff09;活动图 &#xff08;5&#xff09;状态图 &#xff08;6&#xff09;通信图 软件需求指用户对系…

【科研】ET-BERT代码分析

0. 数据集 论文使用的TLS1.3数据集是从 2021 年 3 月到 2021 年 7 月在中国科技网 (CSTNET) 上收集的。 如果要使用自己的数据集的话&#xff0c;需要检查数据格式是否与datasets/cstnet-tls1.3/目录下一致&#xff0c;并且在data_process/目录下指定数据集路径。 用于微调的…

Pomotroid 使用指南:一款高颜值 PC 端番茄时钟

文章首发于个人公众号&#xff1a;「阿拉平平」 番茄工作法作为一套高效易行的时间管理方案&#xff0c;是由意大利人弗朗西斯科西里洛于 1992 年创立的。作者发明的初衷源自于自身严重的拖延症&#xff0c;于是他找来一个厨房用的番茄计时器&#xff0c;调到 10 分钟&#xff…

游戏SDK(二)框架设计

前言 根据上一篇游戏SDK&#xff08;一&#xff09; 客户端整体架构&#xff0c;介绍了游戏SDK 及 游戏SDK的需求分析。根据需求分析&#xff0c;对游戏SDK的设计分为3大块&#xff1a; 客户端&#xff1a;接口统一&#xff0c;做好逻辑转发和处理。具体渠道具体实现&#xf…

【高并发】- 生产级系统搭建 - 4

前言 关于高并发系统中&#xff0c;当前比较热门的还是属于“秒杀”系统&#xff0c;前面章节在整理了“秒杀”系统的相关设计概念后&#xff0c;本章节&#xff0c;来讲解扣减库存相关的业务逻辑。 1 库存的那些事 一般电商网站中&#xff0c;购买流程一般都是这样的&#xff…

多线程之Callable接口、ReentrantLock、信号量 Semaphore以及CountDownLatch

目录&#xff1a;一、Callable接口Callable的用法小结二、ReentrantLockReentrantLock 的用法ReentrantLock 和 synchronized 的区别&#xff1f;为什么有了 synchronized 还需要 juc(java.util.concurrent) 下的 lock&#xff1f;三、信号量 Semaphore如何理解信号量&#xff…

Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例

本节内容使用用例基类自定义TestSuitecollect-only的实现testlist的实现用例tags的实现rerun-fails的实现命令行参数的使用更简单的用例编写使用用例基类因为每条用例都需要从excel中读取数据&#xff0c;解析数据&#xff0c;发送请求&#xff0c;断言响应结果&#xff0c;我们…