为什么会有贪婪与非贪婪模式呢?我们先来回顾一下正则中表示数量词的规则(前面的正则规则表中 有):

    • * : 0次到多次
    • + : 1次到多次
    • ? : 0次到1次
    • {m} : m次
    • - {m,n} : m至n次
    • {,n} : 0至n次
    • {m,} : m至多次

    {m,n} 可以等价表示 * , + , ? 这 3 种数量词:

      • : {0,}
      • : {1,}
    • ? : {,1}或{0,1}(部分编程语言只支持)

    数量词 + 和 * 并没有我们想象的那么简单,测试一下:

    1. >>> import re
    2. >>> re.findall('\d+', '123456abc')
    3. ['123456']
    4. >>> re.findall('\d*', '123456abc')
    5. ['123456', '', '', '', '']

    可以看到 号额外匹配了4个空字符串,通过https://regex101.com/可以清楚的看到这4个空字符串
    (粉红色竖线)所在的位置。
    image.png
    表示0次到多次,由于可以匹配0次所以匹配到了空字符串。结果是否令你有些难以理解,那么我们接
    下来看看贪婪模式和非贪婪模式具体的概念。
    贪婪模式就是尽可能匹配更多的字符,非贪婪模式则是尽可能匹配最少的字符,这两种匹配模式会产生
    不同的匹配结果。