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

news/2025/2/22 5:52:20/

文章目录

  • 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.ppmy.cn/news/20892.html

相关文章

HashMap原理分析

HashMap原理分析JDK7 HashMap1、模型介绍2、底层实现原理3、描述一下put的过程4、HashMap扩容机制&#xff1a;5、HashMap中的循环链表是如何产生的6、HashMap和HashTable的区别7、HashMap为什么用红黑树而不用B树&#xff1f;JDK8 HashMapJDK7 HashMap 1、模型介绍 HashMap在…

单片机开发---ESP32S3移植lvgl+触摸屏

书接上文 《单片机开发—ESP32-S3模块上手》 本章内容 熟悉一下ESP32S3的开发&#xff0c;修改范例程序的lvgl&#xff0c;使之能够匹配现在的显示屏。 具体工作大概为通过SPI接口连接一块SPI串口屏幕&#xff0c;并且适配lvgl&#xff0c;最后加上触摸屏作为输入。 屏幕 …

第九层(7):STL之list

文章目录前情回顾list概念优缺点构造函数赋值函数交换函数容器和大小操作插入操作删除操作单个数据访问反转操作排序下一座石碑&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;一名大一的智能制造专业学生&#xff0c;在学习C/C的路上会越走越远&#xff0c;后面不…

大数据专业前景怎么样?

大数据专业毕业生未来的岗位选择空间比较大&#xff0c;有三大类岗位可选择分别是大数据开发岗位、大数据分析岗位和大数据运维岗位&#xff0c;在不同的行业和技术体系结构下这些岗位也包含很多细分的岗位。 大数据开发岗位分为平台研发岗位和行业场景开发岗位两大类&#xf…

Leetcode力扣秋招刷题路-0114

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 114. 二叉树展开为链表&#xff08;Mid&#xff09; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中…

测牛学堂:软件测试开发python入门之list列表详解(一)

1列表详解 列表&#xff0c;在python中是list&#xff0c;使用[] 注意&#xff1a; 1 列表可以存放任意多的数据 2 列表中可以存放任意类型的数据 3 列表中数据之间&#xff0c;使用逗号分隔 列表的定义方式 1 使用list进行定义。list定义列表&#xff0c;也称为数据类型转换。…

MyBatisPlus入门

文章目录MyBatisPlus1&#xff0c;MyBatisPlus入门案例与简介1.1 入门案例步骤1:创建数据库及表步骤2:创建SpringBoot工程步骤3:勾选配置使用技术步骤4:pom.xml补全依赖步骤5:添加MP的相关配置信息步骤6:根据数据库表创建实体类步骤7:创建Dao接口步骤8:编写引导类步骤9:编写测试…

Linux常用的一些实战脚本(持续更新)

目录 一&#xff1a;根据PID过滤进程所有信息 二&#xff1a;根据进程名过滤进程信息 三&#xff1a;根据用户名查询该用户的相关信息 四&#xff1a;加固系统的一些配置 五&#xff1a;实现磁盘分区的 六&#xff1a;使用一整块硬盘创建逻辑卷 七&#xff1a;将一块硬盘…