正则表达式详细讲解

目录

一、正则表达式概念

二、八元素

1、普通字符:

2、元字符:

3、通配符 .:

4、字符类 []:

5、量词:

6、锚点 ^ 和 $:

7、捕获组 ():

8、转义字符 \:

三、日常使用的正则表达式

1、邮箱

2、电话(美国)

3、URL

4、日期(YYYY-MM-DD)

5、IP地址

6、用户名(仅包含字母和数字,且长度为6-12字符)

7、密码(包含大小写字母、数字、特殊字符,且长度为8-16个字符)

总结

我的其他博客


一、正则表达式概念

正则表达式(Regular Expression,简称Regex或RegExp)是一种用于描述字符串模式的表达式。它提供了一种灵活的方式来进行字符串的匹配、搜索、替换和提取操作。正则表达式是由普通字符和元字符(metacharacters)组成的字符串,这些元字符具有特殊的意义,用于定义匹配规则。

以下是正则表达式的一些基本概念和元素:

  1. 普通字符: 表达式中的普通字符(例如字母、数字、符号)表示它们自身,只有它们自身与输入字符串中的字符匹配。

  2. 元字符: 元字符是具有特殊含义的字符,它们用于构建匹配模式。例如,*+.^$ 等都是元字符。

  3. 通配符: .(点)是一个通配符,匹配任意单个字符,除了换行符。

  4. 字符类: 方括号 [] 用于定义一个字符类,匹配其中任意一个字符。例如,[aeiou] 可以匹配任何一个元音字母。

  5. 量词: 量词用于指定匹配模式中字符的数量。例如,* 表示零个或多个,+ 表示一个或多个,? 表示零个或一个。

  6. 锚点: ^(脱字符)用于匹配字符串的开头,$ 用于匹配字符串的结尾。

  7. 捕获组: 使用圆括号 () 可以创建捕获组,用于分组并记住匹配的子表达式。捕获组允许你提取匹配的部分。

  8. 转义字符: 反斜杠 \ 用于转义元字符,使其失去特殊含义,匹配字符本身。例如,\. 匹配实际的点字符。

正则表达式的语法因编程语言而异,但基本的概念和元素在大多数语言中是相似的。许多编程语言(如Python、JavaScript、Java)都提供了内置的正则表达式支持。正则表达式是一个强大而灵活的工具,但有时也可能变得复杂,特别是对于复杂的匹配模式。

二、八元素

1、普通字符:

普通字符是正则表达式中的字母、数字、符号等,它们表示它们自身。例如,正则表达式中的 a 将精确匹配字符串中的字母 "a"。

2、元字符:

元字符是具有特殊含义的字符,用于构建匹配模式。一些常见的元字符包括:

  • .:匹配任意单个字符(除了换行符)。
  • *:匹配前一个字符的零个或多个实例。
  • +:匹配前一个字符的一个或多个实例。
  • ?:匹配前一个字符的零个或一个实例。
  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。
  • []:定义字符类,匹配其中任意一个字符。
  • ():创建捕获组。

3、通配符 .

点号 . 是一个通配符,用于匹配任意单个字符,除了换行符。例如,正则表达式 a.c 可以匹配 "abc"、"adc"、"a1c" 等。

4、字符类 []

字符类用于定义一个字符集合,匹配其中的任意一个字符。例如,正则表达式 [aeiou] 匹配任何一个元音字母。

5、量词:

  • 量词用于指定字符或字符类的重复次数。
    • *:匹配前一个字符的零个或多个实例。
    • +:匹配前一个字符的一个或多个实例。
    • ?:匹配前一个字符的零个或一个实例。
  • 例如,正则表达式 \d+ 可以匹配一个或多个数字。

6、锚点 ^$

^ 用于匹配字符串的开始,$ 用于匹配字符串的结束。例如,正则表达式 ^start 可以匹配以 "start" 开始的字符串。

7、捕获组 ()

捕获组用于创建子表达式,可以对其进行分组,以便后续引用或提取。例如,正则表达式 (\d+)-(\w+) 可以匹配像 "123-abc" 这样的字符串,并将数字和字母分别放入两个捕获组中。

8、转义字符 \

反斜杠 \ 用于转义元字符,使其失去特殊含义,匹配字符本身。例如,\. 可以匹配实际的点字符。

三、日常使用的正则表达式

1、邮箱

  • 正则表达式:^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
  • 用途:用于验证电子邮件地址的格式。

2、电话(美国)

  • 正则表达式:^\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$
  • 用途:用于验证美国的电话号码格式,包括可选的括号、分隔符。

3、URL

  • 正则表达式:^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$
  • 用途:用于验证URL的格式。

4、日期(YYYY-MM-DD)

  • 正则表达式:^\d{4}-\d{2}-\d{2}$
  • 用途:用于验证日期的格式,例如:2023-12-07。

5、IP地址

  • 正则表达式:^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
  • 用途:用于验证IPv4地址的格式。

6、用户名(仅包含字母和数字,且长度为6-12字符)

  • 正则表达式:^[a-zA-Z0-9]{6,12}$
  • 用途:用于验证用户名的格式,只包含字母和数字,长度为6到12个字符。

7、密码(包含大小写字母、数字、特殊字符,且长度为8-16个字符)

  • 正则表达式:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,16}$
  • 用途:用于验证密码的格式,包含大小写字母、数字和特殊字符,长度为8到16个字符。

总结

正则表达式是一项强大而灵活的技能,它在许多编程语言和文本编辑器中都有广泛的应用。熟练地使用正则表达式可以大大提高文本处理和字符串操作的效率

我的其他博客

HTTP与HTTTPS的区别-CSDN博客

 

什么情况下会产生StackOverflowError(栈溢出)和OutOfMemoryError(堆溢出)怎么排查-CSDN博客

谈谈我对HashMap扩容机制的理解及底层实现-CSDN博客 

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

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

相关文章

算法 最小生成树

算法选择 稠密图:朴素版普利姆算法【因为代码短】 稀疏图:克鲁斯卡尔算法【因为思路简单】 普利姆(Prim) 朴素 Prim 时间复杂度 O(n^2) 适用情况 稠密图 算法流程 集合:当前已经在连通块中的所有点 初始化距…

水平自动扩容和缩容HPA;API资源对象NetworkPolicy;Kubernetes用户安全控制;Kubernetes创建普通用户示例

水平自动扩容和缩容HPA;API资源对象NetworkPolicy;Kubernetes用户安全控制;Kubernetes创建普通用户示例 水平自动扩容和缩容HPA(本部分操作适合K8s版本>1.23.x) HPA全称是Horizontal Pod Autoscaler,翻译成中文是…

Windows 系统彻底卸载 SQL Server 通用方法

Windows 系统彻底卸载 SQL Server 通用方法 无论什么时候,SQL Server 的安装和卸载都是一件让我们头疼的事情。因为不管是 SQL Server 还是 MySQL 的数据库,当我们在使用数据库时因为未知原因出现问题,想要卸载重装时,如果数据库…

[LeetCode]-283. 移动零-1089. 复写零

目录 283. 移动零 描述 解析 代码 1089. 复写零 描述 解析 代码 283. 移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 &…

【Linux--基础IO】

目录 一、系统文件接口1.1 open1.2 write1.3 read1.4 close 二、文件描述符三、文件描述符的分配规则四、重定向4.1输出重定向的原理4.2dup2函数的系统调用 五、缓冲区5.1代码及现象5.2原理解释5.3C语言FILE 六、文件系统6.1磁盘的介绍6.1磁盘的分区管理 7、软硬连接7.1软连接7…

Windows本地如何添加域名映射?(修改hosts文件)

1. DNS(域名系统) Domain Name System(域名系统):为了加快定位IP地址的速度, 将域名映射进行层层缓存的系统. 目的:互联网通过IP(10.223.146.45)定位浏览器建立连接,但是我们不易区别IP,为了方便用户辨识I…

使用cmake构建的工程的编译方法

1、克隆项目工程 2、进入到工程目录 3、执行 mkdir build && cd build 4、执行 cmake .. 5、执行 make 执行以上步骤即可完成对cmake编写的工程进行编译 ,后面只需执行你的编译结果即可 $ git clone 你想要克隆的代码路径 $ cd 代码文件夹 $ mkdir bu…

【GAMES101】三维变换

games101的第四节课讲了三维变换和观察变换,我们这里先记录一下三维变换的知识,后面再讲观察变换 齐次坐标下的三维变换 类似于解决之前二维变换平移的问题,三维变换下用齐次坐标通过增加一个维度来表示,第四个维度为1表示这是个…

【计算机网络学习之路】HTTP请求

目录 前言 HTTP请求报文格式 一. 请求行 HTTP请求方法 GET和POST的区别 URL 二. 请求头 常见的Header 常见的额请求体数据类型 三. 请求体 结束语 前言 HTTP是应用层的一个协议。实际我们访问一个网页,都会像该网页的服务器发送HTTP请求,服务…

Verilog学习 | 用initial语句写出固定的波形

initial beginia 0;ib 1;clk 0;#10ia 1; #20ib 0;#20ia 0; endalways #5 clk ~clk; 或者 initial clk 0;initial beginia 0;#10ia 1; #40ia 0; endinitial beginib 1;#30 ib 0; endalways #5 clk ~clk;

Linux Component概述和高通V4l2驱动模型

1 Linux为什么要引入Component框架? 为了让subsystem按照一定顺序初始化设备才提出来的。 subsystem中由很多设备模块,内核加载这些模块的时间不确定。子系统内有些模块是需要依赖其它模块先初始化才能进行自己初始化工作(例如v4l2 subdev和v4l2 video …

CentOS系统中设置反向代理服务器的步骤

在CentOS系统中设置反向代理服务器可以帮助你隐藏原始服务器的细节,并提高服务器的安全性。以下是在CentOS系统中设置反向代理服务器的步骤概述: 安装反向代理软件: 常见的反向代理软件包括Nginx和Apache。你可以选择其中之一来作为你的反向…