当前位置: 首页 > article >正文

正则表达式解析

正则表达式解析

  • 字符分类
    • 元字符
    • 特殊字符
    • 量词(限定字符)
    • 转义字符
    • 范围字符
  • 语法使用
    • 分枝
    • 分组

字符分类

元字符

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

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

特殊字符

常用特殊字符

代码说明
.匹配除换行外任意字符
\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个字符之间。

$:表示字符串的结束


http://www.kler.cn/a/421503.html

相关文章:

  • 实例分割模型的数据集格式转换
  • 点云3DHarris角点检测算法推导
  • DevOps工程技术价值流:GitLab源码管理与提交流水线实践
  • Rust学习笔记_12——闭包
  • FolderMove 3.0 |文件夹安全转移,释放C盘空间
  • 【Nativeshell】flutter的pc跨平台框架学习记录<二> 窗口间通信
  • ceph mon 数据重建
  • yt6801 ubuntu有线连接驱动安装
  • vue前端 下载、预览图片
  • 【Unity】【游戏开发】【VR】如何解决脚本不在同一个项目无法引用Public变量的问题
  • Epsilon2系列战术级微型惯性RTK卫星高精度组合导航系统0.5°/h
  • 开发中使用UML的流程_06 PIM-2:分析业务规则
  • Lumos学习王佩丰Excel第十九讲:Indirect函数
  • 《NGINX金典教程》读书笔记
  • 什么是敏捷(Agile)开发?Scrum和Kanban有什么关系?
  • 【Leetcode Top 100】2. 两数相加
  • 海康gige工业相机无驱动取像突破(c#实现,最后更新,你也可以移植到linux下去用)
  • 蓝桥杯第 23 场 小白入门赛
  • Spring Boot项目的创建
  • 微服务搭建----springboot接入Nacos2.x
  • 【Java基础面试题009】Java的I/O流是什么?
  • 160-两路14位400Msps AD,两路16位400Msps DA FMC子卡模块
  • 基于PySpark 使用线性回归、随机森林以及模型融合实现天气预测
  • 机器学习:精确率与召回率的权衡
  • 【服务器问题】xshell 登录远程服务器卡住( 而 vscode 直接登录不上)
  • Linux常用命令行