不管是贪婪模式,还是非贪婪模式,都需要发生回溯才能完成相应的功能。回溯算法是正则表达式里最
    重要的一种算法思想,依次考察正则表达式中的每个字符,非通配符时就直接跟文本的字符进行匹配,
    相同则继续往下处理;不同则回溯。
    比如遇到遇到正则表达式的 “xy{1,3}z” 有多种匹配方案,就先随意的选择一种匹配方案,然后继续考
    察剩下的字符。如果中途发现无法继续匹配下去了,就回到这个岔路口,重新选择一种匹配方案,然后
    再继续匹配剩下的字符。
    默认贪婪模式下:

    1. regex = "xy{1,3}z"
    2. text = "xyyz"

    y{1,3}会尽可能长地去匹配,当匹配完 xyy 后,由于 y 要尽可能匹配最长即三个,但字符串中后面是个
    z 就会导致匹配不上,这时候正则就会向前回溯,吐出当前字符 z,接着用正则中的 z 去匹配。
    image.png
    非贪婪模式下:

    1. regex = "xy{1,3}?z"
    2. text = "xyyz"

    由于 y{1,3}? 代表匹配 1 到 3 个 y,尽可能少地匹配。匹配上一个 y 之后,也就是在匹配上 text 中的 xy
    后,正则会使用 z 和 text 中的 xy 后面的 y 比较,发现正则 z 和 y 不匹配,这时正则就会向前回溯,重
    新查看 y 匹配两个的情况,匹配上正则中的 xyy,然后再用 z 去匹配 text 中的 z,匹配成功。
    image.png