shell编程系列(14)-正则表达式详解

正则表达式详解

  • 引言
  • 一、正则表达式基础
    • 1.1 什么是正则表达式?
    • 1.2 基本元字符
      • 1.2.1 示例:匹配以`abc`开头的字符串
      • 1.2.2 示例:匹配以`.txt`结尾的文件名
  • 二、正则表达式元字符详解
    • 2.1 数量词
      • 2.1.1 示例:匹配连续的数字
      • 2.1.2 示例:匹配至少3个、最多5个字母的单词
    • 2.2 特殊字符转义
        • 2.2.1 示例:匹配包含点号`.`的字符串
      • 2.2.2 示例:匹配包含星号`*`的字符串
  • 三、分组和反向引用
    • 3.1 分组
      • 3.1.1 示例:匹配重复出现的单词
    • 3.2 反向引用
      • 3.2.1 示例:匹配重复的单词
  • 四、实用技巧
    • 4.1 匹配邮箱地址
    • 4.2 匹配URL
  • 五、结语

引言

因为在前几篇文章中多次提到了正则表达式,所以就专门写一篇文章介绍一下正则表达式吧。正则表达式是一种强大的文本匹配工具,广泛应用于文本处理、搜索和替换等领域。无论是程序开发者、系统管理员还是数据科学家,掌握正则表达式都是一项基本技能。本文将深入介绍正则表达式的基本语法、常见元字符、量词、分组、反向引用等概念,同时通过详细的示例演示,帮助读者更全面地理解和运用这一重要的文本匹配工具。

一、正则表达式基础

1.1 什么是正则表达式?

正则表达式是一种由字符和运算符组成的字符串,用于定义字符串的模式。这些模式可用于搜索、匹配、替换和提取字符串中的特定部分。

1.2 基本元字符

  • .:匹配任意单个字符。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • []:字符集,匹配方括号中的任一字符。
  • |:逻辑或,匹配两个模式中的任一一个。

1.2.1 示例:匹配以abc开头的字符串

^abc

上述正则表达式将匹配以abc开头的字符串。

1.2.2 示例:匹配以.txt结尾的文件名

\.txt$

这个正则表达式将匹配以.txt结尾的文件名。

二、正则表达式元字符详解

2.1 数量词

  • *:匹配前一个元素零次或多次。
  • +:匹配前一个元素一次或多次。
  • ?:匹配前一个元素零次或一次。
  • {n}:匹配前一个元素恰好 n 次。
  • {n,}:匹配前一个元素至少 n 次。
  • {n,m}:匹配前一个元素至少 n 次,但不超过 m 次。

2.1.1 示例:匹配连续的数字

\d+

上述正则表达式将匹配一个或多个连续的数字。

2.1.2 示例:匹配至少3个、最多5个字母的单词

\w{3,5}

这个正则表达式将匹配包含3到5个字母的单词。

2.2 特殊字符转义

有些字符在正则表达式中具有特殊含义,如果要匹配它们本身,需要使用反斜杠 \ 进行转义。

2.2.1 示例:匹配包含点号.的字符串
\.

上述正则表达式将匹配包含点号.的字符串。

2.2.2 示例:匹配包含星号*的字符串

\*

这个正则表达式将匹配包含星号*的字符串。

三、分组和反向引用

3.1 分组

使用小括号 () 可以将多个元素组合成一个单元,形成一个分组。

3.1.1 示例:匹配重复出现的单词

\b(\w+)\b(\s+\1)+

上述正则表达式将匹配重复出现的单词,例如 word word.

3.2 反向引用

在正则表达式中,可以使用\1\2等来引用之前的分组。

3.2.1 示例:匹配重复的单词

\b(\w+)\b\s+\b\1\b

上述正则表达式将匹配重复的单词,例如 word word.

四、实用技巧

4.1 匹配邮箱地址

\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b

上述正则表达式将匹配常见的邮箱地址。

4.2 匹配URL

\bhttps?://[^\s]+

这个正则表达式将匹配常见的URL。

五、结语

正则表达式作为文本匹配的强大工具,在各种场景下都有着不可替代的作用。通过本文的介绍,读者应该对正则表达式的基础语法、常用元字符、量词、分组和反向引用等有了更深入的理解。掌握正则表达式不仅是一项基本技能,也是提高文本处理效率的关键。希望读者通过学习本文,能够使用正则表达式解决实际问题,并深入了解它在不同编程语言中的应用。

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

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

相关文章

用C语言实现链栈的基本操作

#include <stdio.h> #include <malloc.h> #define ElemType char//相当于ElemType等同于char类型 //链式结构 数据域指针域 typedef struct LinkStackNode//定义一个链栈的结构体类型 {ElemType data;//ElemType是链栈的元素类型&#xff0c;代表数据域struct Lin…

在JSP项目中编写一个接口返回JSON 供JSP界面异步请求数据

首先 我们要引入json处理的依赖工具 在 pom.xml文件的 dependency 标签中加入如下代码 <dependency><groupId>com.googlecode.json-simple</groupId><artifactId>json-simple</artifactId><version>1.1.1</version> </dependenc…

mockito加junit实现单元测试笔记

目录 一、简介1.1 单元测试的特点1.2 mock类框架使用场景1.3 常用mock类框架1.3.1 mockito1.3.2 easymock1.3.3 powermock1.3.4 JMockit 二、mockito的单独使用2.1 mock对象与spy对象2.2 初始化mock/spy对象的方式初始化mock/spy对象第1种方式初始化mock/spy对象第2种方式初始化…

Java并发编程高级指南:线程池、并发集合和原子操作

引言&#xff1a; 在当今的软件开发中&#xff0c;多线程编程已经成为一种必不可少的技术。而在Java中&#xff0c;线程是一种非常重要的概念&#xff0c;它可以帮助我们实现并发处理&#xff0c;提高程序的性能和效率。本文将介绍Java中的并发编程高级指南&#xff0c;包括线程…

新版idea创建maven项目时的下载问题

新版idea创建时没有一个直接的maven选项 而是一个Maven Archetype选项&#xff0c;我们只需要选择它也是一样的&#xff0c;后面跟着选就行 配置国内下载源的方法如下&#xff1a; 1. 2. 3. 代码&#xff1a; <mirror> <id>alimaven</id> <name>al…

dell服务器安装PERCCLI

因在linux 系统中无法查看系统磁盘的raid级别&#xff0c;也无法得知raid状态&#xff0c;需要安装额外的包来监控&#xff0c;因是dell服务器&#xff0c;就在dell网站中下载并安装 1、下载链接&#xff1a;驱动程序和下载 | Dell 中国https://www.dell.com/support/home/zh-…

git 操作心得

git remote prune origin --同步远程分支到本地 git reflog --dateiso --查看历史记录详细信息

【评论送书】一本书讲透Java线程:原理与实践

摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流量洪峰&#xff0c;背后都离不开多线程技术的支持。在数字化转型的过程中&#xff0c;高并发、高性能是衡量系统性能的核心指…

流程画布开发技术方案归档(G6)

&#x1f3a8; 在理想的最美好世界中&#xff0c;一切都是为最美好的目的而设。 —— 伏尔泰 如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 一、技术选型 •从可维护性和可拓展性出发 •基本满足 1&#xff1a;链接: https://github.com/hukaibaihu/vue-org…

如何在报表工具 FastReport Cloud 中使用 ClickHouse

FastReport Cloud 是一项云服务 (SaaS)&#xff0c;旨在为您的企业存储、编辑、构建和发送报告。您的整个团队可以从世界任何地方访问这些报告&#xff0c;并且无需创建自己的应用程序。 FastReport Cloud 试用&#xff08;qun&#xff1a;585577353&#xff09;https://chat8.…

Python——传参

一、类传参&#xff1a; class PositionEmbeddingSine(nn.Module):"""This is a more standard version of the position embedding, very similar to the oneused by the Attention is all you need paper, generalized to work on images."""…

Linux C语言 39-进程间通信IPC之管道

Linux C语言 39-进程间通信IPC之管道 本节关键字&#xff1a;C语言 进程间通信 管道 FIFO 相关库函数&#xff1a;pipe、mkfifo、mknod、write、read 什么是管道&#xff1f; 管道通常指“无名管道”&#xff0c;是Unix系统中最古老的IPC通信方式。 管道的分类 管道&#…

2023下半年软件设计师 关于我用了半个月过了软件设计师这件事

前言 废话不多说、看图喽。刚可以查询、我就赶紧去查成绩 上午成绩是57分、下午成绩是45分。下午成绩刚好踩着及格线 有关备考 我是在工作之余外进行的备考、备考前前后后花了半个月。但是备考的很仓促、每天下班都要搞到十一二点。早上赶班车也在刷题&#xff0c;吃饭的时候也…

【JavaEE】生产者消费者模式

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

H5: 按钮的点击热区

简介 按钮&#xff0c;尤其是手机端使用的页面按钮&#xff0c;很需要热区&#xff0c;避免用户点击困难。 分析 1.不改变原有的样式 2.扩大可点击范围 具体实现 <template><div class"iconBtnBox"><div:class"props.widthHeight ? iconBt…

期末速成数据库极简版【分支循环函数】(4)

目录 全局变量&局部变量 局部变量定义declare 局部变量赋值select 局部变量赋值select 【1】分支结构IF 【2】分支结构CASE 简单CASE语句 搜索CASE语句 【3】循环结构While 【4】系统函数 常用字符串函数 时间函数 【5】自定义函数—标量函数 函数创建 函…

如何学习Java并发编程

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 2012年我刚转行到互联网…

MySQL三 | 多表查询

目录 多表查询 内连接 隐式内连接 显示内连接 外连接 左外连接 右外连接 自连接 子查询 多表查询 笛卡尔积:集合A和集合B的所有组合情况 A * B 在多表查询时应消除无效的笛卡尔积 内连接 查询的是两张表交集的地方 隐式内连接 SELECT 字段列表 FROM 表1&#xf…

定义一个学生类,其中有3个私有数据成员学号、姓名、成绩,以及若于成员。 函数实现对学生数据的赋值和输出。

#include <stdio.h> // 定义学生类 typedef struct Student { int stuNum; // 学号 char name[20]; // 姓名&#xff0c;假设最长为20个字符 float score; // 成绩 } Student; // 初始化学生信息 void initializeStudent(Student *student, int num, const…

一件小事情

开始我发现表格里面有一个生僻字&#xff0c;开始识别的很好&#xff0c;但是后面就识别的不好&#xff0c;于是我想用之前的方法去识别这个字&#xff0c;但是之前的方法不太好用&#xff0c;因为之前的方法现在不用了&#xff0c;我要用第二种方法&#xff0c;但是第二种方法…