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

超详细正则表达式逐字解析!!!

一、基础语法(逐字符解析)

1. 普通字符
  • 规则:直接匹配字符本身,无特殊含义。
  • 示例hello → 精准匹配字符串 “hello” a1@ → 匹配 “a” + 数字 “1” + 符号 “@” 的组合
2. 元字符(核心符号)
符号详细解释案例与场景
.匹配任意一个字符(如字母、数字、符号),但不能匹配换行符(\nh.llo → 匹配 “hello”、“h3llo”、“h@llo” 等
^匹配字符串的开头位置,不消耗字符^start → 字符串必须以 “start” 开头(如 “start123” 匹配,“123start” 不匹配)
$匹配字符串的结尾位置,不消耗字符end$ → 字符串必须以 “end” 结尾(如 “123end” 匹配,“end123” 不匹配)
\转义符,将特殊字符变为普通字符\. → 匹配 “.” 本身(如 “file.txt” 中的 “.”)\\ → 匹配 “” 符号本身
\d匹配任意一个数字(等价于 [0-9]\d\d → 匹配 “12”、“34” 等两位连续数字
\w匹配字母、数字、下划线(等价于 [a-z0-9_]\w+ → 匹配连续字母/数字/下划线(如 “user_123”)
\s匹配空白字符(包括空格、制表符 \t、换行符 \n 等)a\sb → 匹配 “a b”(中间有空格)、“a\tb”(中间有制表符)
\b匹配单词边界(单词与空格/标点的交界处)\bcat\b → 匹配独立的单词 “cat”(如 “cat” 匹配,“category” 不匹配)
3. 字符集合(灵活匹配)
语法详细解释案例与场景
[abc]匹配方括号内的任意一个字符[aeiou] → 匹配任意元音字母(如 “apple” 中的 “a” 和 “e”)
[a-z]匹配指定范围内的字符(支持连字符 -[0-9A-F] → 匹配十六进制字符(0-9、A-F)
[^abc]排除方括号内的字符(^在开头表示否定)[^0-9] → 匹配非数字字符(如 “a”、“@”)
4. 量词(控制重复次数)
符号详细解释案例与场景
\*前一个字符出现 0次或多次(贪婪模式)ab*c → 匹配 “ac”(b出现0次)、“abbc”(b出现2次)
+前一个字符出现 1次或多次(至少一次)a+ → 匹配 “a”、“aaa”,但不匹配空字符串
?前一个字符出现 0次或1次(可选匹配)https? → 匹配 “http”(s出现0次)和 “https”(s出现1次)
{n}前一个字符 精确出现n次\d{4} → 匹配4位数字(如年份 “2024”)
{n,}前一个字符 至少出现n次\w{5,} → 匹配至少5位字母/数字(如 “hello123”)
{n,m}前一个字符 出现n到m次a{2,4} → 匹配 “aa”、“aaa”、“aaaa”

二、进阶语法(复杂规则)

1. 分组与引用
语法详细解释案例与场景
( )分组:将多个字符视为一个整体,可用于提取或复用(ab)+ → 匹配 “abab”(分组整体重复两次)
\1反向引用:引用第1个分组的匹配结果(按括号顺序编号)(\w+)\s+\1 → 匹配重复单词(如 “hello hello” 中的两个 “hello”)
2. 逻辑选择
语法详细解释案例与场景
**``**逻辑或:匹配左侧或右侧的任意一种模式
3. 边界与断言
语法详细解释案例与场景
\B匹配非单词边界(单词内部位置)\Bcat\B → 匹配 “scatter” 中的 “cat”(不在单词边界)
(?=...)正向先行断言:右侧必须满足条件,但不消耗字符\d+(?=元) → 匹配 “100元” 中的 “100”(后面必须有 “元”)
(?<=...)正向后行断言:左侧必须满足条件,但不消耗字符(?<=\$)\d+ → 匹配 “100"中的"100”(前面必须有"100"中的"100"(前面必须有"")

三、高级语法(精准控制)

1. 贪婪与懒惰模式
模式语法详细解释案例对比
贪婪模式.*.+尽可能多匹配,直到无法满足条件a.*b → 在 “a1b2b3” 中匹配整个字符串 “a1b2b”
懒惰模式.*?.+?尽可能少匹配,一旦满足即停止a.*?b → 在 “a1b2b” 中仅匹配 “a1b”
2. 非捕获分组
语法详细解释案例与场景
(?:...)分组但不记录匹配内容(节省内存,提高性能)(?:ab)+ → 匹配 “abab”,但无法用 \1 引用分组
3. 否定断言
语法详细解释案例与场景
(?!...)负向先行断言:右侧不能出现指定模式\d{3}(?!-) → 匹配3位数字且后面没有 “-”(如 “123” 匹配,“123-” 不匹配)
(?<!...)负向后行断言:左侧不能出现指定模式(?<!\$)\d+ → 匹配前面没有 "“的数字(如"100"匹配,”"的数字(如"100"匹配,“100” 不匹配)
4. 模式修饰符
修饰符详细解释案例与场景
i忽略大小写/hello/i → 匹配 “HELLO”、“Hello”
m多行模式:使 ^$ 匹配每行的开头和结尾/^start/m → 在多行文本中匹配每行的 “start”
s单行模式:允许 . 匹配换行符(\n/.*/s → 跨行匹配所有内容(包括换行符)

四、实战案例解析

1. 匹配电子邮箱
^[\w.-]+@([\w-]+\.)+[\w-]+$
  • 分步解析:
    • ^[\w.-]+ → 用户名部分(字母/数字/下划线/点/连字符)
    • @ → 必须包含 “@” 符号
    • ([\w-]+\.)+ → 域名前缀(如 “gmail.”、“yahoo.”)
    • [\w-]+$ → 顶级域名(如 “com”、“org”)
2. 提取HTML标签内容
<(\w+)>(.*?)</\1>
  • 分步解析:
    • <(\w+)> → 匹配开始标签(如 <div>,分组捕获标签名)
    • (.*?) → 懒惰模式匹配标签内容
    • </\1> → 匹配结束标签(如 </div>\1 引用分组确保标签名一致)

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

相关文章:

  • 更改 docker0 IP
  • 【python】OpenCV—Template Matching
  • 科技查新和查收查引有什么区别?
  • 9、Python collections模块高效数据结构
  • react 中 key 的使用
  • 比特币牛市还在不在
  • 高级java每日一道面试题-2025年3月05日-微服务篇[Eureka篇]-Eureka在微服务架构中的角色?
  • 2025-03-20 学习记录--C/C++-C 库函数 - toupper()、tolower()、 isspace()
  • 用vue3显示websocket的状态
  • yum软件包乾坤大挪移(Yum Package Qiankun Great Migration)
  • 传统服务部署、虚拟化部署与云原生部署资源消耗对比与优化指南
  • SVN完全指南
  • 【Java/数据结构】队列(Quque)
  • java NIO中的FileSystems工具类可以读取本地文件系统,ZIP/JAR等,无需解压处理,还可以复制文件
  • Unity 云渲染本地部署方案
  • 大白话详细解读函数之柯里化
  • 策略模式 vs. 工厂模式:对比与分析
  • 【git】git管理规范--分支命名规范、CommitMessage规范
  • Microchip AN1477中关于LLC数字补偿器的疑问
  • k8s搭建kube-prometheus