第18周 2-正则表达式

正则表达式介绍

1. 什么是正则表达式?

正则表达式(Regular Expression)是一种用于匹配、查找和替换字符串的表达式。它是一种规则的描述语言,用于定义字符串的模式。正则表达式广泛应用于各种主流编程语言中,如 C、Java、.NET、JavaScript 等,能够高效地进行字符串的验证、查找和替换等操作。

2. 正则表达式的应用场景

  • 字符串校验:验证输入的格式是否符合预期,例如检查一个字符串是否符合邮箱格式、电话号码格式等。
  • 字符串查找:在文本中搜索符合特定模式的字符串,如查找所有以 “http” 开头的链接。
  • 字符串替换:替换符合特定模式的字符串,如将文本中的所有空格替换为逗号。

元字符

1. 元字符的定义

元字符是指在正则表达式中用于匹配特定字符类型的特殊字符。它们通过特定的符号表示一类字符,而不是单个字符,具有特殊的含义。

2. 常用元字符介绍

  • \d: 匹配任意一个数字字符(0-9)。
  • \D: 匹配任意一个非数字字符,与 \d 相反。
  • \w: 匹配任意一个字母、数字或下划线字符(a-z, A-Z, 0-9, _)。
  • \W: 匹配任意一个非字母、非数字、非下划线的字符,与 \w 相反。
  • \s: 匹配任意一个空白字符(空格、制表符、换行符等)。
  • \S: 匹配任意一个非空白字符,与 \s 相反。
  • .: 匹配任意一个字符(不包括换行符)。
  • \.: 匹配一个普通的点号(.),表示原义输出。

3. 元字符的应用示例

  1. 匹配四位整数和六位小数:

    • 需求:匹配形如 1234.567890 的数字格式。
    • 正则表达式:\d{4}\.\d{6}
    • 解释:
      • \d{4} 表示匹配四个数字。
      • \. 表示匹配一个点号(小数点)。
      • \d{6} 表示匹配六个数字。
    • 注意:小数点必须使用 \. 来匹配原义的点,否则会被误解为匹配任意字符。
  2. 匹配杭州和宁波的座机号码:

    • 需求:匹配形如 0571-123456780574-12345678 的座机号码格式。
    • 正则表达式:057[14]-\d{8}
    • 解释:
      • 057 表示前缀,固定不变。
      • [14] 表示第四位只能是 14
      • - 表示匹配原义的横杠。
      • \d{8} 表示匹配八个数字。
  3. 匹配 18 位身份证号:

    • 需求:匹配前 17 位为数字,最后一位可能为数字或字母 X 的身份证号格式。
    • 正则表达式:[1-6,8]\d{16}[0-9xX]
    • 解释:
      • [1-6,8] 表示第一位数字的范围,可以是 1-68
      • \d{16} 表示匹配接下来的 16 位数字。
      • [0-9xX] 表示最后一位可以是 0-9 的任意数字,或者 x(忽略大小写)。

4. 元字符使用中的常见错误

  • 点号(.)的误用:
    • . 匹配任意字符,很多初学者会误以为它可以匹配小数点,实际上需要使用 \. 才能匹配普通的小数点。

定位匹配概念总结

定位匹配指的是在字符串中判断某个字符串是否以特定字符开头或结尾。在正则表达式中:

  • 上箭头 (^) 表示以特定字符开头。
  • 美元符 ($) 表示以特定字符结尾。

全字匹配

  • 使用上箭头和美元符组合,可以实现全字匹配(头尾匹配)。例如,^a.*a$ 表示字符串必须以 a 开头并以 a 结尾。

实验示例

  1. 输入原始字符串:AB AB AB AB,正则表达式:AB

    • 结果:找到四处 AB,因为正则表达式默认进行全局查找。
  2. 判断以特定字符开头:

    • 使用 ^AB.* 可以匹配以 AB 开头的字符串。
    • 如果输入 BA,则无法匹配。
  3. 判断以特定字符结尾:

    • 使用 AB$ 可以匹配以 AB 结尾的字符串。
    • 如果输入 BA,则无法匹配。

贪婪模式、非贪婪模式与表达式分组总结

贪婪模式

贪婪模式是指在满足条件的情况下,尽可能多地匹配字符串。在正则表达式中,这是默认匹配行为。例如,对于字符串 111222333和正则表达式/d{6,8}/,贪婪模式会匹配到八个字符,结果为 11122233`。

非贪婪模式

非贪婪模式(懒惰模式)是指在满足条件的情况下,尽可能少地匹配字符串。在正则表达式中,添加问号(?)后,匹配将采用非贪婪模式。例如,对于字符串 111222333,使用正则表达式 /d{6,8}?/ 会匹配到六个字符,结果为 111222

实际应用

在实际项目中,贪婪模式可能导致匹配过多字符。例如,提取超链接中的网址时

表达式分组概念总结

什么是表达式分组

表达式分组是将一个完整的正则表达式分成多个子表达式的方式,使用小括号将子表达式包裹起来,使得子表达式可以作为整体进行匹配。

表达式分组的应用

1. 匹配验证码

  • 四位验证码:使用 /^\d{4}$/ 匹配。
  • 六位验证码:错误地使用 /^\d{4,6}$/ 会匹配到五位,正确方式是使用分组:/(^\d{4}$)|(^\d{6}$)/

2. 匹配车牌号

  • 车牌号由区域汉字和五位数字或字母组成,使用分组来清晰表达:
    • 区域部分用 [黑][辽][京] 等表示。
    • 车牌部分使用 [A-Z0-9]{5} 表示。
    • 完整表达式示例:/^([黑辽京][A-Z])-([A-Z0-9]{5})$/

3. 匹配中文或英文姓名

  • 英文姓名:可以使用 /^[A-Z][a-z]+/s[A-Z][a-z]+$/ 匹配。
  • 中文姓名:使用 Unicode 匹配,示例:
    • 中文范围:\u4E00-\u9FA5
    • 完整表达式示例:/^([\u4E00-\u9FA5]{2,8}|[A-Z][a-z]+ [A-Z][a-z]+)$/

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

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

相关文章

Leetcode面试经典150题-322.零钱兑换

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 示…

uniapp 常用高度状态栏,导航栏,tab栏,底部安全高度

实际效果 使用 //使用 let posConfig this.getPosConfig(); // 传false返回值为 px大小 console.log(posConfig.safeBottomH) // 入参 是否转换为rpxgetPosConfig(toRpx true) {const systemInfo uni.getSystemInfoSync();// #ifdef MPconst menuButtonInfo uni.getMenuBu…

基于RPA+BERT的文档辅助“悦读”系统 | OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给…

Linux云计算 |【第四阶段】NOSQL-DAY2

主要内容: Redis集群概述、部署Redis集群(配置manage管理集群主机、创建集群、访问集群、添加节点、移除节点) 一、Redis集群概述 1、集群概述 所谓集群,就是通过添加服务器的数量,提供相同的服务,从而让…

计算机毕业设计之:微信小程序的校园闲置物品交易平台(源码+文档+讲解)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

卷积神经网络-迁移学习

文章目录 一、迁移学习1.定义与性质2.步骤 二、Batch Normalization(批次归一化)三、ResNet网络1.核心思想2.残差结构(1)残差块(2)残差结构类型 四、总结 一、迁移学习 迁移学习(Transfer Lear…

书生大模型实战营学习[9] OpenCompass 评测 InternLM-1.8B 实践

准备工作 打开开发机,选择cuda11.7环境,A100选择10%,点击创建,然后进入开发机即可,和之前的操作一样。接下来创建环境,下载必要的依赖包 conda create -n opencompass python3.10 conda install pytorch2…

Altium Designer(AD)百度云下载与安装(附安装步骤)

在我们日常使用当中,Altium designer常常也被简称为AD,是一款一体化的电子产品开发系统软件,主要运行在Windows操作系统上。 我们通过Altium designer把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技…

Eclipse Memory Analyzer (MAT)提示No java virtual machine was found ...解决办法

1,下载mat后安装,打开时提示 jdk版本低,需要升级到jdk17及以上版本,无奈就下载了jdk17,结果安装后提示没有jre环境,然后手动生成jre目录,命令如下: 进入jdk17目录:执行&…

鸿蒙界面开发(九):列表布局 (List)

列表布局 当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、音乐列表、购物清单等&#xf…

Uniapp 微信小程序 最新 获取用户头像 和 昵称 方法 有效可用

文章目录 前言代码实现运行效果技术分析 前言 同事有个需求 授权获取用户头像 和 昵称 。之前做过线上小程序发版上线流程 就实现了下 最新的方法和 api 有些变化 记录下 代码实现 先直接上代码 <template><view class"container"><buttonclass&qu…

解决macOS安装redis以后不支持远程链接的问题

参考文档:https://blog.csdn.net/qq_37703224/article/details/142542179?spm1001.2014.3001.5501 安装的时候有个提示, 使用指定配置启动: /opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf那么我们可以尝试修改这个配置文件: code /opt/homebrew/…

IDEA服务启动时无法输出日志

起服务时&#xff0c;控制台啥日志也没有 解决方案&#xff1a;选择【启用调试输出】 SQL的日志无法打印 原来安装了一个Mybatis Log Free&#xff0c;用的好好的。 后来换了个项目&#xff0c;SQL执行日志就打印不出来了。 解决方案&#xff1a;换个插件&#xff0c;我换了…

使用离火插件yoloV8数据标注,模型训练

1. 启动 2.相关配置 2.1 data.yaml path: D:/yolo-tool/yaunshen-yolov8/YOLOv8ys/YOLOv8-CUDA10.2/1/datasets/ceshi001 train: images val: images names: [蔡徐坤,篮球] 2.2 cfg.yaml # Ultralytics YOLOv8, GPL-3.0 license # Default training settings and hyp…

VS Code使用Git Bash终端

Git Bash可以运行linux命令&#xff0c;在VS Code的终端界面&#xff0c;找到号旁边的箭头&#xff0c;就能直接切换了 当然&#xff0c;前提是安装了Git Bash&#xff0c;并且在资源管理器里&#xff0c;能鼠标右键出"Git Bash Here"

C语言 | Leetcode C语言题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ /* *int strCmpn&#xff1a;比较滑动窗口和字符串的相同值 char * s&#xff1a;字符串s&#xff0c;滑动窗口的位置 char * p&#xff1a;字符串p&#…

Python 课程21-Django

前言 在当今互联网时代&#xff0c;Web开发已成为一项必备技能。而Python作为一门简洁、高效的编程语言&#xff0c;其Web框架Django以其强大的功能和快速开发的特点&#xff0c;受到了广大开发者的青睐。如果你想深入学习Django&#xff0c;构建自己的Web应用&#xff0c;那么…

云中红队系列 | 使用 AWS API 配置Fireprox进行 IP轮换

在渗透测试评估期间&#xff0c;某些活动需要一定程度的自动化&#xff0c;例如从 LinkedIn 等网站抓取网页以收集可用于社会工程活动、密码喷洒登录门户或测试时盲注的有效员工姓名列表网络应用程序。但是&#xff0c;从单个源 IP 地址执行这些活动可能会导致在测试期间被拦截…

深度学习—神经网络基本概念

一&#xff0c;神经元 1.生物神经元与人工神经元 1.1神经元是人脑的基本结构和功能单位之一。人脑中有数1000亿个神经元&#xff0c;其功能是接受&#xff08;树突&#xff09;&#xff0c;整合&#xff08;细胞体&#xff09;&#xff0c;传导&#xff08;轴突&#xff09;和…

电脑usb接口封禁如何实现?5种禁用USB接口的方法分享!(第一种你GET了吗?)

“防患于未然&#xff0c;安全始于细节。”在信息技术飞速发展的今天&#xff0c;企业的信息安全问题日益凸显。 USB接口作为数据传输的重要通道&#xff0c;在带来便利的同时&#xff0c;也成为了数据泄露和安全风险的高发地。 因此&#xff0c;对电脑USB接口进行封闭管理&a…