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

发布于:2025-03-21 ⋅ 阅读:(130) ⋅ 点赞:(0)

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

1. 普通字符
  • 规则:直接匹配字符本身,无特殊含义。
  • 示例hello → 精准匹配字符串 “hello” a1@ → 匹配 “a” + 数字 “1” + 符号 “@” 的组合
2. 元字符(核心符号)
符号 详细解释 案例与场景
. 匹配任意一个字符(如字母、数字、符号),但不能匹配换行符(\n h.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 引用分组确保标签名一致)

网站公告

今日签到

点亮在社区的每一天
去签到