加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则是如何判断有重复/由不重复的数字组成的串的。

发布时间:2020-12-14 01:44:57 所属栏目:百科 来源:网络整理
导读:源自这里:http://bbs.csdn.net/topics/390804087 .*?(d).*?1.*?$ 这个判断了有重复的数字 原理: ?是非贪婪,从最少的数量试起 *是0~无穷大次。最小就是0 对于源串“1234567890” 第一次: .*? == 空 d == 1 .*? == 空 1 == 2 但是希望的是 前面的捕获

源自这里:http://bbs.csdn.net/topics/390804087

.*?(d).*?1.*?$ 这个判断了有重复的数字

原理: ?是非贪婪,从最少的数量试起

*是0~无穷大次。最小就是0

对于源串“1234567890”

第一次: .*? ==> 空

d ==> 1

.*? ==> 空

1 ==> 2 但是希望的是前面的捕获组(d)的内容 ,也就是1,所以,第一次尝试失败。

第二次: 正则从最后面向前回退状态,所以,先重新尝试第二个 .*?

.*? ==> 2

1 ==> 3 但是希望的是前面的捕获组(d)的内容 ,也就是1,。。。

第N次尝试,当第二个.*?已经吃进23456789,1 ==> 0,仍然是失败,已经无法再有尝试了。

开始回退再前面的第一个.*?

.*? ==> 1

d ==> 2

.*? ==> 空

所以,再次尝试失败。

。。。。

第N次尝试,当第一个.*?已经吃进12345678,d ==> 9 1 ==> 0,仍然是失败,已经无法再有尝试了。

整个尝试失败,表明字符串是由完全无重复的数字构成的。

$ 是表明到当前位置的时候必须是字符串结束位置,确保所有字符都参加了尝试。第三个.*?基本属于配合它打酱油的。

把.*?换成.*,使用贪婪模式,应该也可以实现同样功能,但是回退过程将完全不同。

第一次尝试第一个.*就吃进了1234567890,然后开始吐字符来回退。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读