# 课程 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 |
解决上述任务以继续下一个问题,或者查看答案。