正则表达式:简化模式匹配的利器

正则表达式:简化模式匹配的利器

  • 一、正则表达式简介
    • 1.1 正则表达式介绍
    • 1.2 正则表达式使用场景
  • 二、正则表达式语法
    • 2.1 正则表达式元字符和特性
    • 2.2 正则表达式常用匹配
  • 三、正则表达式实战
    • 3.1 常见的正则表达式用法
    • 3.2 正则表达式的过滤用法
    • 3.3 正则表达式的代码用法
  • 四、结论

在软件开发和文本处理中,经常需要进行模式匹配和文本搜索。这时,正则表达式是一种强大的工具,可以帮助我们高效地进行字符串匹配和处理。本文将介绍正则表达式的基本概念和用法,帮助读者掌握这个强大的工具。

一、正则表达式简介

1.1 正则表达式介绍

正则表达式(Regular Expression),通常缩写为RegexRegExp,是一种用来匹配字符串模式的文本模式,也可以称为模式字符串,它由一系列字符和特殊字符组成,用于文本处理、搜索、匹配和替换,正则表达式是一个强大的工具。

1.2 正则表达式使用场景

正则表达式常用于搜索文档日志文件和代码中的特定文本模式。例如,查找包含特定关键词或短语的行。在表单验证和数据输入处理中,可以使用正则表达式来验证用户输入的数据是否符合特定的格式,如电子邮件地址、电话号码、日期、密码等。在日志文件中,正则表达式可用于提取有关系统运行状况、错误或警告的信息,以便分析和报告。

正则表达式广泛应用于各种编程语言和工具中。以下是几个常见的应用场景:

  • 字符串匹配:使用正则表达式在文本中查找指定模式的字符串。
  • 字符串替换:使用正则表达式将字符串中的特定模式替换为指定内容。
  • 表单验证:使用正则表达式验证用户输入的表单数据,如手机号码、邮箱等。
  • 数据抽取:使用正则表达式从文本中提取特定模式的数据。

二、正则表达式语法

2.1 正则表达式元字符和特性

📍 字符匹配

  • 普通字符:普通字符按照字面意义进行匹配,例如匹配字母 “a” 将匹配到文本中的 “a” 字符。
  • 元字符:元字符具有特殊的含义,例如 \d 匹配任意数字字符,\w 匹配任意字母数字字符,. 匹配任意字符(除了换行符)等。

📍 量词

  • *:匹配前面的模式零次或多次。
  • +:匹配前面的模式一次或多次。
  • ?:匹配前面的模式零次或一次。
  • {n}:匹配前面的模式恰好 n 次。
  • {n,}:匹配前面的模式至少 n 次。
  • {n,m}:匹配前面的模式至少 n 次且不超过 m 次。

*+ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。

📍 字符类

  • [ ]:匹配括号内的任意一个字符。例如,[abc] 匹配字符 “a”、“b” 或 “c”。
  • [^ ]:匹配除了括号内的字符以外的任意一个字符。例如,[^abc] 匹配除了字符 “a”、“b” 或 “c” 以外的任意字符。

📍 边界匹配

  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • \b:匹配单词边界。
  • \B:匹配非单词边界。

📍 分组和捕获

  • ( ):用于分组和捕获子表达式。
  • (?: ):用于分组但不捕获子表达式。

📍 特殊字符

  • \:转义字符,用于匹配特殊字符本身。
  • .:匹配任意字符(除了换行符)。
  • |:用于指定多个模式的选择。

📍 非捕获元

  • ?::为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串

  • ?= ?!:为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串

在这里插入图片描述

2.2 正则表达式常用匹配

  • [ABC]:匹配 […] 中的所有字符
  • [^ABC]:匹配除了 […] 中字符的所有字符
  • [A-Z]: [A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母
  • .:匹配除换行符(\n、\r)之外的任何单个字符,相等于[^\n\r]
  • [\s\S]:匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行
  • \w:匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
  • \d:匹配任意一个阿拉伯数字(0 到 9)。等价于 [0-9]
  • \n:匹配一个换行符
  • \r:匹配一个回车符
  • \s:匹配任何空白字符,包括空格、制表符、换页符等
  • \S:匹配任何非空白字符
  • \t:匹配一个制表符
  • ?=:exp1(?=exp2):查找 exp2 前面的 exp1
  • ?<=:(?<=exp2)exp1:查找 exp2 后面的 exp1
  • ?!:exp1(?!exp2):查找后面不是 exp2 的 exp1
  • ?<!:(?<!exp2)exp1:查找前面不是 exp2 的 exp1

三、正则表达式实战

3.1 常见的正则表达式用法

在这里插入图片描述

  1. 邮箱验证:^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  2. 手机号码验证:^1[3456789]\d{9}$
  3. URL 提取:^(https?|ftp)://[^\s/$.?#].[^\s]*$
  4. 数字提取:\d+
  5. IP 地址验证:^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$

3.2 正则表达式的过滤用法

🚀 过滤用法之或

在使用grep命令进行正则表达式匹配时,可以使用-E选项来启用扩展正则表达式。然后,你可以使用以下正则表达式来匹配包含"string1"或"string2"的文本:

grep -E "string1|string2" <file>

在上面的命令中,你需要将<file>替换为你要搜索的文件名或路径。string1string2是你要匹配的两个字符串。

-E选项告诉grep使用扩展正则表达式,其中的|表示逻辑或操作符。

请确保使用实际的文件名和字符串来替换命令中的占位符。另外,grep命令默认区分大小写。如果你想进行大小写不敏感的匹配,可以添加-i选项,如grep -Ei "string1|string2" <file>。这将在忽略大小写的情况下匹配字符串。

🚀 过滤用法之与

要使用grep命令匹配同时包含"string1"和"string2"的文本行,你可以使用正则表达式的正向肯定前瞻(positive lookahead)来实现。

以下是一个示例正则表达式,用于匹配同时包含"string1"和"string2"的文本行:

grep -E "^(?=.*string1)(?=.*string2)" <file>

在上面的命令中,你需要将<file>替换为你要搜索的文件名或路径。string1string2是你要匹配的两个字符串。

正则表达式使用正向肯定前瞻,分别包含两个部分:

  • (?=.*string1):表示在当前位置向前查找,必须包含"string1"。
  • (?=.*string2):表示在当前位置向前查找,必须包含"string2"。

使用^匹配行的开头,确保这两个条件都适用于整行。

请确保使用实际的文件名和字符串来替换命令中的占位符。另外,grep命令默认区分大小写。如果你想进行大小写不敏感的匹配,可以添加-i选项,如grep -Ei "^(?=.*string1)(?=.*string2)" <file>。这将在忽略大小写的情况下匹配字符串。

3.3 正则表达式的代码用法

  • Java 正则代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexMatches {public static void main(String args[]) {String str = "";String pattern = "";Pattern r = Pattern.compile(pattern);Matcher m = r.matcher(str);System.out.println(m.matches());}}
  • Python 正则代码
import re
pattern = re.compile(ur'')
str = u''
print(pattern.search(str))

四、结论

正则表达式是一种强大而灵活的工具,可以帮助我们在文本处理和模式匹配中提高效率。本文介绍了正则表达式的基本概念和常见用法,希望读者能够掌握这个重要的工具,并在实际开发中灵活应用。通过深入学习和实践,你将能够更加熟练地使用正则表达式解决各种文本处理的挑战。

相关参考
[1] OSChina 正则表达式手册
[2] 菜鸟教程 - 正则表达式 - 语法
[3] 正则表达式在线测试

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

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

相关文章

Hadoop Single Node Cluster的安装

Hadoop Single Node Cluster的安装 安装JDK查看java -version更新本地软件包安装JDK查看java安装位置 设置SSH无密码登录安装hadoop下载安装设置hadoop环境变量修改hadoop配置设置文件设置core-site.xml设置YARN-site.xml设置mapred-site.xml设置HDFS分布式文件系统创建并格式化…

关于opencv,sitl仿真环境等问题报错解决

multirotor The first day ——12.10 1.install vmware-workstation and ubuntu swap sources and 换输入法 2.learn git github关联远程仓库 3.install and use Typora Git codemeaningmkdir test创建目录cd test进入目录git init初始化仓库ls &#xff1b;ls -ah查看目…

华为配置OSPF与BFD联动示例

组网需求 如图1所示&#xff0c;SwitchA、SwitchB和SwitchC之间运行OSPF&#xff0c;SwitchA和SwitchB之间的交换机仅作透传功能。现在需要SwitchA和SwitchB能快速感应它们之间的链路状态&#xff0c;当链路SwitchA-SwitchB发生故障时&#xff0c;业务能快速切换到备份链路Swi…

HTML---CSS美化网页元素

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.div 标签&#xff1a; <div>是HTML中的一个常用标签&#xff0c;用于定义HTML文档中的一个区块&#xff08;或一个容器&#xff09;。它可以包含其他HTML元素&#xff0c;如文本、图像…

3.2 内容管理模块 - 课程分类、新增课程、修改课程

内容管理模块-课程分类、新增课程、修改课程 文章目录 内容管理模块-课程分类、新增课程、修改课程一、课程分类1.1 课程分类表1.2 查询树形结构1.2.1 表自连接1.2.2 SQL递归 1.3 Mapper1.4 Service1.5 Controller1.6 效果图 二、添加课程2.1 需求分析2.2 数据表2.2.1 课程基础…

嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑

一、目的/概述 二、资料来源 三、逻辑和包含关系 四、Arm GNU Toolchain最常用的命令 嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑 一、目的/概述 对比高集成度的IDE(MDK、IAR等)&#xff0c;Linux开发需要自己写Makefile等多种脚本。eclipse、Visual Studio等需要了解预处…

Selenium框架的使用心得(一)

最近使用selenium框架实现业务前端的UI自动化&#xff0c;在使用selenium时&#xff0c;有一些心得想要和大家分享一下~ Selenium是一款用于web应用程序测试的工具&#xff0c;常用来实现稳定业务的UI自动化。这里&#xff0c;不想对其发展历史做介绍&#xff0c;也不想用官方…

0089__一条普遍存在于嵌入式实时系统(RTOS)中的嵌套使用互斥量的bug分析

一条普遍存在于嵌入式实时系统(RTOS)中的嵌套使用互斥量的bug分析_rt_mutex_take-CSDN博客

vscode 文件目录栏缩进

一个好的开发IDE&#xff0c;一定是让人赏心悦目的&#xff0c;这个赏心悦目也一定是包含层级目录的清晰明了&#xff01;不能像感冒的鼻涕一样一擤一摊子&#xff01;就像。。。。嗯&#xff0c;算了&#xff0c;断子还是不讲了&#xff0c;怕有些妹子投诉 或发消息批评我。。…

【ppt密码】ppt的密码忘了,怎么破解

PPT文件设置了保护密码&#xff0c;但是密码忘记了&#xff0c;无法打开PPT文件、无法编辑PPT文件了该怎么办&#xff1f;PPT文件的两种保护密码该如何解密&#xff1f; 首先是打开密码 网上有一种解决方法&#xff1a; 1、重新命名PPT文件&#xff0c;将其后缀改为zip格式&…

Shell编程基础 – C语言风格的Bash for循环

Shell编程基础 – C语言风格的Bash for循环 Shell Programming Essentials - C Style For Loop in Bash By JacksonML 循环是编程语言的基本概念之一&#xff0c;同样也是Bash编程的核心。当用户需要一遍又一遍地运行一系列命令直到达到特定条件时&#xff0c;例如&#xff1…

优点和缺点(以及在求职过程中如何处理它们)

你知道你会感到紧张&#xff0c;因为你真的很想要这份工作。当人力资源人员提出这个普遍存在的问题“你的优势和劣势是什么&#xff1f;”时&#xff0c;他们在寻找什么&#xff1f; 有哪些突出的优点和缺点示例&#xff1f;您如何将这些示例个性化&#xff0c;以免听起来像人…

创建型模式 | 单例模式

一、单例模式 单例模式(Singleton Pattern)&#xff0c;使用最广泛的设计模式之一。其意图是保证一个类仅有一个实例被构造&#xff0c;并提供一个访问它的全局访问接口&#xff0c;该实例被程序的所有模块共享。 1、饿汉式 1.1、基础版本 在程序启动后立刻构造单例&#xff0…

leecode题解Golang版本-3-无重复字符最长子串

题目 无重复字符最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 题解 func lengthOfLongestSubstring(s string) int {m : make(map[uint8]int)res : 0for l, r : 0, 0; r < len(s); r {m[s[r]]if v, ok : m[s[r]]; !ok || v 1…

速盾网络:业务卓越,数字安全的领先者

在数字时代的浪潮中&#xff0c;业务成功需要强大的数字基石。速盾网络以其出色的CDN加速、高防IP、SDK游戏盾和抗DDoS攻击等业务&#xff0c;成为业界领先的数字安全保障者&#xff0c;为您的业务提供全方位的支持与保护。 CDN加速&#xff1a;业务飞跃的翅膀 速盾网络以全球…

设计模式详解---模板方法模式

1. 模板方式概念 当需要定义一个算法的框架&#xff0c;但允许具体步骤在子类中灵活实现时&#xff0c;可以使用模板方法&#xff08;Template Method&#xff09;设计模式。该模式通过定义一个模板方法以及一组抽象方法&#xff0c;将算法的结构固定&#xff0c;但具体实现延…

算法基础课-基础算法-二分查找-数的范围

lmid 需要补上加一 rmid 不需要补上加一 789. 数的范围 题目 提交记录 讨论 题解 视频讲解 给定一个按照升序排列的长度为 n&#xfffd; 的整数数组&#xff0c;以及 q&#xfffd; 个查询。 对于每个查询&#xff0c;返回一个元素 k&#xfffd; 的起始位置和终止位…

智能优化算法应用:基于世界杯算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于世界杯算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于世界杯算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.世界杯算法4.实验参数设定5.算法结果6.参考文…

小程序自定义轮播图样式

小程序自定义轮播图样式以下是各案例&#xff0c;仅供大家参考。 效果展示&#xff1a; index.wxml代码&#xff1a; <view><!-- 轮播 --><view><swiper indicator-dots"{{indicatorDots}}"autoplay"{{autoplay}}" interval"{{…

数据可视化的魅力你了解吗?

你真的了解数据可视化吗&#xff1f;它所具备的真正魅力可能远远超出我们想象。数据可视化扩展了我们对数字和信息的简单理解&#xff0c;为我们揭示了一个无限可能的世界。今天我就以可视化行业的多年工作经验出发&#xff0c;和大家简单聊聊数据可视化的魅力。 数据的故事化…