欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 超详细正则表达式逐字解析!!!

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

2025/7/20 7:58:13 来源:https://blog.csdn.net/qq_57012538/article/details/146373806  浏览:    关键词:超详细正则表达式逐字解析!!!

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

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 引用分组确保标签名一致)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词