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

第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.kler.cn/news/327381.html

相关文章:

  • 数据库 - Redis数据库
  • 爬虫设计思考之一
  • World of Warcraft [CLASSIC][80][Grandel] /console cameraDistanceMaxZoomFactor 2
  • Spring Boot 点餐系统:高效餐饮服务
  • 43. 创建纹理贴图
  • 使用Qt实现实时数据动态绘制的折线图示例
  • 从入门到精通:单片机 100个关键技术关键词
  • (最新已验证)stm32 + 新版 onenet +dht11+esp8266/01s + mqtt物联网(含微信小程序)上报温湿度和控制单片机(保姆级教程)
  • 信号量SEM
  • 淘宝商品详情API接口多线程调用:解锁数据分析行业的效率新篇章
  • Linux防火墙配置绿色端口,解决无法访问java服务的问题
  • LINUX下的驱动开发三
  • window系统下nginx管理脚本
  • 【数据库】深入解析 MongoDB 数据库语法
  • 《OpenCV 计算机视觉》—— 视频背景建模
  • 【React】react hooks的使用规则
  • 基于深度学习的持续的知识积累与转移
  • golang学习笔记19-面向对象(一):面向对象的引入
  • 9.30学习
  • 南沙C++信奥赛陈老师解一本通题: 1963:【13NOIP普及组】小朋友的数字
  • Redis 性能优化的高频面试题及答案
  • HAProxy 安全配置
  • 正则表达式中的贪婪模式和非贪婪模式
  • [大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器
  • 相互作用的检索增强 3D 分子生成扩散模型 - IRDiff 评测
  • 滚雪球学MySQL[5.1讲]:事务与并发控制
  • 如何使用ssm实现钢铁集团公司安全管理系统的构建与实现
  • 基于小步大步法(BSGS)的同态加密多项式求值
  • 滚雪球学Oracle[2.1讲]:Oracle数据库安装与配置
  • 新品上市!智能无线接入型路由器ZX7981EP,WIFI6技术双频频段