千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 正则表达式中贪婪模式和非贪婪模式的区别在哪里

正则表达式中贪婪模式和非贪婪模式的区别在哪里

来源:千锋教育
发布人:yyy
时间: 2023-06-28 16:10:00 1687939800

  正则表达式中的贪婪模式和非贪婪模式是指量词匹配时的两种不同匹配方式,它们的区别在于匹配时的优先级和匹配的范围。

  在贪婪模式下,匹配器尽可能多地匹配符合要求的字符,直到不能再匹配为止。例如,正则表达式 a.*b 在匹配字符串 "abbcab" 时,会匹配整个字符串 "abbcab",而不是期望的 "ab"。

  在非贪婪模式下,匹配器尽可能少地匹配符合要求的字符,直到满足要求为止。例如,正则表达式 a.*?b 在匹配字符串 "abbcab" 时,只会匹配到第一个 "ab",而不是整个字符串。

  在正则表达式中,使用 ? 后缀可以将量词从贪婪模式切换为非贪婪模式。例如,*? 表示非贪婪的零次或多次匹配,而 +? 表示非贪婪的一次或多次匹配。

  总的来说,贪婪模式和非贪婪模式的区别在于匹配时的优先级和匹配的范围,选择合适的模式取决于具体的匹配需求。如果需要尽可能多地匹配字符,就应该使用贪婪模式;如果需要尽可能少地匹配字符,就应该使用非贪婪模式。

  假设有一个字符串 "abbbc",要用正则表达式匹配其中的子串 "ab+c",其中 + 表示至少一个 b。

  使用贪婪模式时,可以使用正则表达式 "ab+c",这个表达式会匹配整个字符串 "abbbc"。

String str = "abbbc";
Pattern pattern = Pattern.compile("ab+c");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 "abbbc"
}

   使用非贪婪模式时,可以在量词后面添加一个问号,使用正则表达式 "ab+?c",这个表达式会匹配到第一个 "abbc" 子串。

String str = "abbbc";
Pattern pattern = Pattern.compile("ab+?c");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 "abbc"
}

   可以看到,贪婪模式和非贪婪模式的区别在于匹配的范围,前者匹配整个字符串,后者只匹配到第一个符合要求的子串。

tags: 贪婪模式
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT