1.案例:
正则表达式
Pattern pattern= Pattern.compile
("^(.*?\\.uid-row-\\d+)(?:\\.uid-|$)");
该正则表达式^(.*?.uid-row-\d+)(?:.uid-|$)用于匹配特定格式的字符串,其核心结构解析如下:
整体结构
^:匹配字符串起始位置
(.*?.uid-row-\d+):第一个捕获组(贪婪模式关闭)
(?:.uid-|$):非捕获组,匹配.uid-或字符串结尾
关键组件详解
.*?:懒惰匹配任意字符(直到遇到后续模式)
.uid-row-\d+:匹配字面量.uid-row-后接1个以上数字
(?:…):非捕获分组,仅用于逻辑分组而不存储匹配结果
.uid-|:匹配.uid−或字符串结束符:匹配.uid-或字符串结束符:匹配.uid−或字符串结束符
典型匹配示例
输入"section.uid-row-42.uid-data":
匹配结果:“section.uid-row-42”(捕获组1)
剩余部分.uid-data被非捕获组忽略
输入"panel.uid-row-99":
完整匹配(因符合$结尾条件)
设计意图
该模式常用于提取含.uid-row-{数字}前缀的字符串片段,并忽略后续可能的.uid-后缀或直接结尾的情况。
2.名词解释:
贪婪模式关闭(非贪婪模式)指正则表达式量词匹配时尽可能少地捕获字符,与默认的贪婪模式(尽可能多匹配)相反。核心要点如下:
一、运作机制对比
贪婪模式(默认)
量词 *、+、{} 会匹配最长可能字符串
示例: a.*b 匹配 axbxb 时捕获整个字符串 axbxb。
非贪婪模式(关闭贪婪)
在量词后添加 ?(如 ?、+?)强制匹配最短可能字符串
示例: a.?b 匹配 axbxb 时仅捕获 axb。
二、关闭贪婪模式的方法
方法 示例 效果
量词后加 ? \d+? 代替 \d+ 匹配最少数字(如 “123” → “1”)
全局标志(PHP) 模式结尾加 /U 整个表达式启用非贪婪匹配
三、典型应用场景
提取最短片段
HTML标签匹配中避免跨标签捕获:
<div>.*?</div> // 仅匹配单个div,而非嵌套的所有内容:ml-citation{ref="3,6" data="citationList"}
精准分割字符串
re.split(r'a.+?b', 'a1b_a2b') # 返回 ['', '_', ''] 而非 ['', '']:ml-citation{ref="2" data="citationList"}
四、核心差异总结
模式 符号 匹配原则 示例输入 a1b2b
贪婪模式 .* 尽可能多匹配 匹配整个 a1b2b
非贪婪模式 .*? 遇结束符立即停止 首次匹配到 a1b 即停止
⚠️ 注意:Python、Java等语言默认启用贪婪模式,需显式添加 ? 关闭;PHP可通过 /U 全局关闭。
1014

被折叠的 条评论
为什么被折叠?



