# 课程 A4:贪婪 vs 懒惰

当正则表达式中包含 *+? 等表示重复的元字符时,默认会匹配尽可能多的字符,这被称为贪婪匹配。例如给定字符串 abcab,模式 a.*b 会匹配最长的以 a 开始、以 b 结束的字符串,也就是匹配到整个字符串而不是 ab

与贪婪匹配相反的是非贪婪匹配,或者称为懒惰匹配,也就是匹配尽可能少的字符。语法是在上述元字符后面加上一个问号 ?。在上面的例子中,模式 a.*?b 将匹配到 ab

所有表示重复的元字符都可以转化为懒惰匹配模式:

  • *?:重复任意次,但尽可能少重复
  • +?:重复 1 次或更多次,但尽可能少重复
  • ??:重复 0 次或 1 次,但尽可能少重复
  • {n,m}?:重复 n 到 m 次,但尽可能少重复
  • {n,}?:重复 n 次或更多次,但尽可能少重复

在下面的练习中,请尝试修改模式 (\d+)0*$,使其捕获不包含 0 的数字前缀。

练习 A4:懒惰匹配
Task Text Capture Groups Result
capture 123000 123
capture 1010 101
capture 789 789
解决上述任务以继续下一个问题,或者查看答案