正则表达式解析

正则表达式解析

字符分类

元字符

是指那些在正则表达式中具有特殊意义的专用字符,元字符是构成正则表达式的基本元件。

元字符大致分成这几类:表示单个特殊字符的,表示空白符的,表示某个范围的,表示次数的量词,另外还有表示断言的。

特殊字符

常用特殊字符

代码 说明
. 匹配除换行外任意字符
\d 匹配任意数字
\D 匹配任意非数字
\w 匹配任意字母数字下划线
\W 匹配任意非字母数字下划线
\s 匹配任意空白符或制表符(看不见的字符)
\S 匹配任意非空白符或制表符(看得见的字符)
\b 匹配单词的开始或者结束
^ 匹配字符串的开始
$ 匹配字符串的结束

示例演示

  • \d\w\s 表示匹配第一个字符为数字,第二个字符为字母数字下划线,第三个字符为空格符。例如:12 ,1q ,1_ 。
  • ^\d\d\d$ 表示匹配三个字符都为数字的字符串,例如:111, 159。

量词(限定字符)

上面我们说到了特殊字符,比如\b表示匹配任意一个数字,那么如果我们的场景需要匹配多个字符呢,这时候我们就需要限定字符的出现。

常用限定字符

代码 说明
* 重复0次到多次
+ 重复1次到多次
? 重复0次或1次
{n} 重复n次
{n,} 重复n次到多次
{n,m} 重复n次到m次

示例演示

  • \d* 表示匹配重复0次或多次数字,例如:为空,2222222
  • \d+ 表示匹配重复1次或多次数字,例如:1,22,333
  • \d? 表示匹配重复0次或1次数字,例如:为空,5
  • \d{4}表示匹配重复4次数字,例如:1111,8888
  • \d{2,}表示匹配重复2次或多次数字,例如:11,5555
  • \d{2,4}表示匹配重复2次到4次数字,例如:11,555,4444

转义字符

在实际开发中难免会遇到匹配元字符的情况,这个时候我们就需要使用转义字符对字符进行转义。

例如: . * \这三个就需要转换为\. \* \\

范围字符

在正则表达式中,表示范围的符号有三个分类

代码 说明
[...] 多选一,括号中的任意单个元素
[a-z] 匹配a-z之间的任意单个元素
[^...] 取反,不包括括号里边的任意单个元素

示例演示

  • [aeiou] 表示任意的元音字母

语法使用

分枝

到此我们已经可以匹配一些东西了,比如手机号\d{11},但有些固定电话只有三位数字或者四位数字,这个时候我们可以采用分枝字符。

例如:\d{3}-\d{8}|\d{4}-\d{8}可以表示不同长度区间的电话号码

分组

字符分组多用于将多个字符重复,主要通过使用小括号()来进行分组。

例如:(\d\w){3} 重复匹配3次(\d\w)

常用用法

代码 说明
(exp) 匹配exp,并捕获文本到自动命名的组里
(?<name·>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
(?=exp) 匹配exp前面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

学了这么多,我们来联系一下叭:

情景:现在我们去某个网站注册用户时候,当设置密码时候,网站会提醒你的密码长度需要在6-12位之间,且匹配规则限制为:密码需要包括数字,大小写字母和特殊字符四种组合,特殊字符需要在~ @ # $ % * _ - + = : , . ?之间选择;

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.[~@#S%_\-+=:.?])[A-Za-z0-9~@#S%_\-+=:.?]{6-16}$

^:表示字符串的开始。

(?=.*[0-9]):这是一个正向前瞻,确保字符串中至少包含一个数字(0-9)。

(?=.*[a-z]):同样是一个正向前瞻,确保字符串中至少包含一个小写字母(a-z)。

``(?=.*[A-Z])`:又一个正向前瞻,确保字符串中至少包含一个大写字母(A-Z)。

(?=.[~@#S%_\-+=:.?]):这个正向前瞻确保字符串中至少包含一个特定的特殊字符。这里的特殊字符包括 ~ @ # S % * _ - + = : , . ?

[A-Za-z0-9~@#S%*_\-+=:.?]:这部分定义了允许的字符集合,包含所有大小写字母、数字和指定的特殊字符。

{6,16}:指定了字符串的长度必须在8到20个字符之间。

$:表示字符串的结束

相关推荐
前端小L1 天前
动态规划:驯服正则表达式的*号魔王
正则表达式
九皇叔叔3 天前
Linux Shell 正则表达式中的 POSIX 字符集:用法与实战
linux·运维·正则表达式
m0_64880493_江哥4 天前
用正则方法从中英文本提取英文的python示例
python·mysql·正则表达式
九皇叔叔4 天前
Linux Shell 正则表达式:从入门到实战,玩转文本匹配与处理
linux·mysql·正则表达式
一百天成为python专家5 天前
python爬虫入门(小白五分钟从入门到精通)
开发语言·爬虫·python·opencv·yolo·计算机视觉·正则表达式
蓝桉~MLGT6 天前
Python学习历程——字符串相关操作及正则表达式
python·学习·正则表达式
一晌小贪欢6 天前
Python爬虫第5课:正则表达式与数据清洗技术
爬虫·python·正则表达式·网络爬虫·python爬虫·python3·网页爬虫
MANONGMN7 天前
Linux 通配符与正则表达式(含实战案例+避坑指南)
linux·运维·正则表达式
带土17 天前
18 .shell编程-正则表达式
linux·正则表达式
2025年一定要上岸7 天前
【日常学习】10-15 学习re
学习·算法·正则表达式