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

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

  • 一、正则表达式简介
    • 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] 正则表达式在线测试

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot Starter机制(自定义Start案例,实际开发场景中的短信模拟,AOP实现日志打印)

前言&#xff1a; 在我们上一篇博客中&#xff0c;实现Freemarke的增删改查&#xff0c;今天分享的是关于SpringBoot Starter机制-- 1.SpringBoot Starter 1.1.什么是SpringBoot Starter SpringBoot中的starter是一种非常重要的机制(自动化配置)&#xff0c;能够抛弃以前繁杂…

云开发微信小程序实战

随着移动互联网的快速发展&#xff0c;微信小程序作为一种轻量级的应用程序&#xff0c;逐渐成为了企业开展业务和提升用户体验的重要工具。而云开发则为企业提供了高效、安全、可靠的后台服务&#xff0c;使得小程序的开发和维护更加便捷。本文将详细介绍如何使用微信小程序与…

web应用开发技术的一些概念

一、Servlet 1.Servlet的工作过程&#xff1a; Servelt的工作流程示意图 &#xff08;1&#xff09;客户端发起一个Http请求到服务器&#xff0c;请求特定的资源或者是要执行特定的操作 &#xff08;2&#xff09;服务器在接收到请求后&#xff0c;根据请求相应的URL将请求分发…

【node】 地址标准化 解析手机号、姓名、行政区

地址标准化 解析手机号、姓名、行政区 实现效果链接源码 实现效果 将东光县科技园南路444号马晓姐13243214321 解析为 东光县科技园南路444号 13243214321 河北省;沧州市;东光县;东光镇 马晓姐 console.log(address, phone, divisions,name);链接 API概览 源码 https://gi…

WPS Office JS宏实现Excel转换为JSON格式数据

通过Excel JS宏&#xff0c;将表格中的数据以”列“形式导出为JSON数据格式。 我们在整理文档时&#xff0c;产品会通过Excel将功能点和功能描述分层级整理出来&#xff0c;有时需要将此数据导入到系统中&#xff0c;Web端对Json这类数据比较友好&#xff0c;所以这里试着使用E…

【Android】在Android上使用mlKit构建人脸检测程序

在Android上构建人脸检测程序 目录 1、导入mlKit依赖包2、配置人脸检测器并且获取人脸检测器3、加载图片资源4、调用人脸检测器5、绘制矩形边框6、完整代码7、效果展示 1、导入mlKit依赖包 dependencies {// ...// Use this dependency to bundle the model with your appi…

用23种设计模式打造一个cocos creator的游戏框架----(十七)命令模式

1、模式标准 模式名称&#xff1a;命令模式 模式分类&#xff1a;行为型 模式意图&#xff1a;将一个请求封装为一个对象&#xff0c;从而使得可以用不同的请求对客户进行参数化:对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 结构图&#xff1a; 适用于&am…

DS冲刺整理做题定理(四)查找与排序

最后一期更新&#xff0c;考试之前应该不会再出该专题了&#xff0c;之后有时间会出一些有关链表的代码题&#xff0c;其他章节只挑选重点的总结~ 一.查找 1.顺序查找 又被称为线性查找&#xff0c;对顺序表和链表都使用~基本思想是从某一端开始&#xff0c;逐个检查关键字是否…

GZ015 机器人系统集成应用技术样题1-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书&#xff08;学生赛&#xff09; 样题1 选手须知&#xff1a; 本任务书共 25页&#xff0c;如出现任务书缺页、字迹不清等问题&#xff0c;请及时向裁判示意&#xff0c;并进行任务书的更换。参赛队…

IEEE Transactions on Industrial Electronics工业电子TIE论文投稿须知

一、背景 IEEE TIE作为控制领域的TOP期刊&#xff0c;接收机器人、控制、自动驾驶、仪器和传感等方面的论文&#xff0c;当然范围不止这些&#xff0c;感兴趣的可以自行登录TIE官网查看。所投稿论文必须经过实验验证&#xff0c;偏工程应用类&#xff0c;当然也必须有方法上的…

MFC逆向之CrackMe Level3 过反调试 + 写注册机

今天我来分享一下,过反调试的方法以及使用IDA还原代码 写注册机的过程 由于内容太多,我准备分为两个帖子写,这个帖子主要是写IDA还原代码,下一个帖子是写反调试的分析以及过反调试和异常 这个CrackMe Level3是一个朋友发我的,我也不知道他在哪里弄的,我感觉挺好玩的,对反调试…

Ubuntu解决Failed to fetch https://... Could not resolve ‘某个源‘

在我使用sudo apt install subversion的时候遇到报错&#xff1a; 这个报错与Ubuntu操作系统的软件源配置文件有关系。错误提示显示无法解析“mirrors.shanhe.com”地址&#xff0c;这可能是由于更新软件包列表或下载软件包时出现的网络问题。 1.可以先更新一下源试试&#xf…

TCP/IP详解——UDP 协议

文章目录 1. UDP1.1 UDP 头部1.2 UDP 校验和1.3 UDP 传输过程1.4 UDP-Lite1.5 最大 UDP 数据报长度1.6 UDP 输入队列 1. UDP UDP&#xff1a;用户数据报协议&#xff08;User Datagram Protocol&#xff09;面向无连接的&#xff0c;也就是无需建立连接&#xff0c;传输不可靠。…

【LeetCode刷题笔记(7-1)】【Python】【四数之和】【哈希表】【中等】

文章目录 四数之和题目描述示例 1示例 2提示解决方案1&#xff1a;【四层遍历查找】解决方案2&#xff1a;【哈希表】【三层遍历】 结束语 四数之和 四数之和 题目描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件…

2023.12.15 FineBI与kettle

1.结构化就是可以用schema描述的数据,就是结构化数据,能转为二维表格, 如CSV,Excel, 2.半结构化就是部分可以转换为二维表格,如JSON,XML 3.非结构化数据,就是完全无法用二维表格表示的数据,如Word文档,Mp4,图片,等文件. kettle的流程 新建转换-构建流图-配置组件-保存运行 使…

spring boot集成mybatis和springsecurity实现登录认证功能

参考了很多网上优秀的教程&#xff0c;结合自己的理解&#xff0c;实现了登录认证功能&#xff0c;不打算把理论搬过来&#xff0c;直接上代码可能入门更快&#xff0c;文中说明都是基于我自己的理解写的&#xff0c;可能存在表述或者解释不对的情况&#xff0c;如果需要理论支…

机器学习中数据的特征表示

在实际应用中&#xff0c;数据的类型多种多样&#xff0c;比如文本、音频、图像、视频等。不同类型的数据&#xff0c;其原始特征的空间也不相同。比如一张灰度图像&#xff08;像素数量为 &#x1d437;&#xff09;的特征空间为 [0, 255]&#x1d437;&#xff0c;一个自然语…

统一观测丨使用 Prometheus 监控 Memcached 最佳实践

作者&#xff1a;啃唯 Memcached 简介 Memcached 是什么&#xff1f; Memcached 是一个免费开源、高性能、分布式内存对象缓存系统&#xff0c;支持将任意数据类型的 chunk 数据以键值对的方式存储。本质上 Memcached 是通用于所有的应用的&#xff0c;但最初用于存储被经常…

ArcGIS Pro SDK 右键获取选中的图层

需求&#xff1a; 获取右键选中的图层 解决方法&#xff1a; 地图页面获取选中的图形 // 获取所选要素 var firstFeatureLayer MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(); 布局页面获取选中的地图框 Layout layout …

构建强大应用的引擎:深度解析Spring Boot Starter机制

目录 引言1. Spring Boot Starter机制1.1 什么是Spring Boot Starter1.2 为什么要使用Spring Boot Starter1.3.应用场景1.4.自动加载核心注解说明 2. 综合案例配置类制作控制功能实现 总结 引言 在当今互联网时代&#xff0c;构建高性能、可维护的应用已成为开发者的首要任务。…