首页 新闻 会员 周边 捐助

非贪婪模式匹配流程是什么

0
[已解决问题] 解决于 2025-08-01 17:27

$str="aa1122ccbb";
$str =~ /a\w+?c/
这是个非贪婪模式,
根据非贪婪匹配:(lazy match,reluctant)尽可能少地匹配,也叫做懒惰匹配
那么上面就应该匹配\w+至少一次,那么上面就应该匹配aac,匹配不上才对,这个非贪婪模式匹配流程是什么

_java_python的主页 _java_python | 小虾三级 | 园豆:738
提问于:2025-08-01 17:26
< >
分享
最佳答案
0

匹配流程分析
起始位置
引擎从字符串起始位置开始:

text
a a 1 1 2 2 c c b b

匹配 a
第一个 a 匹配位置0的 'a':

text
[a] a 1 1 2 2 c c b b
非贪婪 \w+? 启动

\w+? 是非贪婪量词,先尝试最小匹配(1个字符)

匹配位置1的 'a'(\w包含字母)

当前匹配:"aa"

text
[a a] 1 1 2 2 c c b b
尝试匹配后续 c

下一个字符是 '1'(位置2),不是 'c'

❌ 匹配失败

\w+? 扩展匹配
由于后续 c 匹配失败,非贪婪量词被迫扩展匹配:

匹配下一个字符 '1' → "aa1"

尝试匹配 c → 下一个是 '1'(位置3),失败

继续扩展:匹配 '1' → "aa11" → 下一个是 '2',失败

继续扩展:匹配 '2' → "aa112" → 下一个是 '2',失败

继续扩展:匹配 '2' → "aa1122" → 下一个是 'c'(位置6)

成功匹配 c

当前匹配:"aa1122"

下一个字符 'c' 匹配成功

最终匹配:"aa1122c"

text
[a a 1 1 2 2 c] c b b

_java_python | 小虾三级 |园豆:738 | 2025-08-01 17:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册