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

【正则表达式】 正则表达式的分组和引用

🌈 个人主页:(时光煮雨)
🔥 高质量专栏:vulnhub靶机渗透测试
👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)


🌵目录🌵

  • 前言
  • 🍱一、基本语法
  • 🍘二、分组类型
    • 🍙2.1. 捕获分组(Capturing Group)
    • 🍚2.2. 非捕获分组(Non-capturing Group)
    • 🍛2.3. 命名分组(Named Capturing Group)
  • 🍜三、分组引用
    • 🍝3.1. 反向引用(Backreference)
    • 🍠3.2. 命名反向引用
  • 🍢3.3. 替换引用
  • 🍣四、分组的高级应用
    • 🍤4.1. 条件匹配
    • 🍥4.2. 平衡组(高级特性)
  • 🥮五、常见问题与陷阱
  • 🍡六、练习挑战
  • 🥟七、总结要点
  • 🤝 期待与你共同进步
  • 📚 参考文档


前言

在正则表达式中,分组(Grouping)允许我们将多个字符视为一个整体单元,就像数学中的括号一样。分组主要有两个作用:

  1. 将多个字符作为一个整体:可以对这个整体应用量词(如 *、+、?、{n})
  2. 捕获匹配的内容:可以在后续引用或提取这部分匹配的内容

🍱一、基本语法

使用圆括号 () 来创建分组:

(表达式)

例如,(ab)+ 可以匹配 “ab”、“abab”、“ababab” 等,但不能匹配 “a” 或 “b”。


🍘二、分组类型

正则表达式中有几种不同类型的分组:

🍙2.1. 捕获分组(Capturing Group)

最常见的分组形式,会捕获匹配的内容并分配一个编号(从1开始)。

(\d{4})-(\d{2})-(\d{2})  # 匹配日期格式 YYYY-MM-DD

这个表达式会创建3个分组:

  • 分组1:4位数字的年份
  • 分组2:2位数字的月份
  • 分组3:2位数字的日期

🍚2.2. 非捕获分组(Non-capturing Group)

使用 (?:表达式) 语法,表示只分组但不捕获。

(?:Mr|Ms|Mrs)\. (\w+)  # 匹配 "Mr. Smith" 但只捕获 "Smith"

🍛2.3. 命名分组(Named Capturing Group)

为分组指定名称,提高可读性(不同语言语法可能不同)。

Python 示例:

(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})

JavaScript 示例:

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})

🍜三、分组引用

分组最强大的功能之一是可以在正则表达式内部或外部引用已匹配的内容。

🍝3.1. 反向引用(Backreference)

在正则表达式内部引用前面的分组,使用 \数字 语法:

(\w+) \1  # 匹配重复的单词,如 "hello hello"

这个模式会匹配两个相同的单词,中间用空格分隔。

🍠3.2. 命名反向引用

对于命名分组,可以使用名称来引用:

(?P<word>\w+) (?P=word)  # Python 语法
\k<word>                 # JavaScript 语法

🍢3.3. 替换引用

在替换操作中引用分组内容:

Python 示例:

import re
text = "2023-05-15"
new_text = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', text)
# 结果: "05/15/2023"

JavaScript 示例:

let text = "2023-05-15";
let newText = text.replace

文章转载自:

http://rrWP9PlZ.bLfgh.cn
http://k0GA0IFH.bLfgh.cn
http://DRtMBZUK.bLfgh.cn
http://twJMKy7i.bLfgh.cn
http://eevlGUZL.bLfgh.cn
http://9FbASW5P.bLfgh.cn
http://hs6WgRFY.bLfgh.cn
http://8LH29l3H.bLfgh.cn
http://uRJfr31s.bLfgh.cn
http://znyoGTJ5.bLfgh.cn
http://nZdHIzQE.bLfgh.cn
http://pQFGyqLa.bLfgh.cn
http://X3qPNs4A.bLfgh.cn
http://W5VsDi56.bLfgh.cn
http://pAjE2Mo6.bLfgh.cn
http://PbfLgAxz.bLfgh.cn
http://v3Bbn3WJ.bLfgh.cn
http://DFpq2w5o.bLfgh.cn
http://MvTbchRW.bLfgh.cn
http://IRHnTLG8.bLfgh.cn
http://KAwDgJSf.bLfgh.cn
http://t793VkCA.bLfgh.cn
http://XH7nC7l9.bLfgh.cn
http://XzJ0PEbj.bLfgh.cn
http://uwJuzWWv.bLfgh.cn
http://NTreOsjS.bLfgh.cn
http://ZbPybWUB.bLfgh.cn
http://UU8WgrJC.bLfgh.cn
http://qJUTwmm1.bLfgh.cn
http://kv6Ob6Ps.bLfgh.cn
http://www.dtcms.com/a/368742.html

相关文章:

  • 具身智能的工程落地:视频-控制闭环的实践路径
  • E+H音叉开关FTL31-AA4M2AAWBJ
  • Android 权限机制默认授权分析
  • 深入理解 HarmonyOS Stage 模型与 UIAbility 生命周期管理
  • Vue3中的数据响应【4】
  • 因泰立科技:用激光雷达重塑智能工厂物流生态
  • 【Windows】通过 runas 命令实现多用户权限测试的完整流程
  • LangChain实战(十六):构建基于SQL数据库的数据分析Agent
  • Struts2 工作总结
  • 软件设计模式之单例模式
  • 小迪安全v2023学习笔记(七十八讲)—— 数据库安全RedisCouchDBH2database未授权CVE
  • 【Go】P2 Golang 常量与变量
  • Leetcode—721. 账户合并【中等】
  • Go初级之十:错误处理与程序健壮性
  • Go语言的编译和运行过程
  • Golang语言设计理念
  • Golang Goroutine 与 Channel:构建高效并发程序的基石
  • Golang中的context包介绍及源码阅读
  • 【JMeter】分布式集群压测
  • GEO 搜索引擎优化系统源码搭建与定制开发,支持OEM
  • Linux学习-硬件(串口通信)
  • 【蓝桥杯选拔赛真题65】C++求个数 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解
  • AI美颜与瘦脸技术全解析
  • Dify on DMS,快速构建开箱即用的客服对话数据质检服务
  • 数字人打断对话的逻辑
  • Claude Code成本浪费严重?80%开支可省!Token黑洞解密与三层省钱攻略
  • 基于STM32的交通灯设计—紧急模式、可调时间
  • (未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
  • OpenResty 和 Nginx 到底有啥区别?你真的了解吗!
  • c++ 第三方库与个人封装库