编辑回复: 不一样的优秀~恭喜你学到了精华!
作者回复: 你好,老师这里更正一下独占模式的例子,落了一个字符。ab{1,3}+bc
作者回复: 如果是单个+的情况下,是最大匹配规则,遇到特殊字符串时,会出现回溯问题。这里增加了一个+,变成两个++,变成了独占模式,避免回溯。
作者回复: 指的是String中的indexof方法
作者回复: 你好,一个+表示匹配一个或多个,表示尽量多的匹配。我们这个再加一个+,\\?(([A-Za-z0-9-~_=%]++\\&{0,1})+)。提供的这个是没有优化的例子。
作者回复: 1、匹配regex中的a和text中的a,匹配成功,继续匹配下一个字符;
2、匹配regex中的b{1,3}+,这个时候是最大匹配规则,也就是说text中会尽量多的去匹配b,直到满足3个b字符匹配成功,才会结束b{1,3}的匹配,这里可以直接匹配到text中的abb;
3、由于还没有满足最大3个的匹配需求,会继续匹配text中的c,发现不匹配,这个时候regex会跳到后面这个字符b,拿这个字符继续匹配;
4、regex中的b发现与text中的c不匹配,则进行回溯,回溯到text中的前一个字符b,发现匹配成功;
5、继续regex的下一个字符c与text中的c字符匹配,匹配成功,匹配结束。
作者回复: 理解很到位,懒惰就是有拿到馒头就走,非常懒,还有馒头拿也不要了。
作者回复: 你好 WL,就是不同的匹配格式,例如 ab{1,2}c,则状态数为2, 即 abc abbc。
作者回复: 这个最直接了,效果是一样的
作者回复: 是的,根据需求来定
作者回复: 对的
作者回复: 对的,根据业务需要来定,贪婪模式会最大匹配字符。
作者回复: 此时不会回溯了,返回不匹配结果。