这个正则写的极其复杂,至少对我而言.
以ffffff为例,将每个f标上下标,即f1,f2,f3,f4,f5,f6
1.(\w)作为第一组,匹配第一个字符f1
2.((?=\1\1\1)(\1))+,这是第二组,将这句分解开来,(?=\1\1\1)和(\1)
第一层意思:(?=\1\1\1)这是一个零宽断言,搜索\w之后至少要有3个相同的字符,加上第一个f则至少要用4个f.即f1,f2,f3,f4或f2,f3,f4,f5或f3,f4,f5,f6
第二层意思:若上面条件成立的话匹配向右搜索的第一个f(此时这个f作为第二组,有f2,f4两个匹配成功),即在f1,f2,f3,f4中匹配f2.联系第一组中的f1即匹配f1,f2,故上一层意思中的红色部分中f2已经匹配,不再参与,所有只有两种可能,即f1,f2,f3,f4和f3,f4,f5,f6.
第三层意思,将第二组中成功匹配的作为独立的一组,即第三组,由此可知,第二组与第三组是同一个位置.
第四层意思:+贪婪模式,作最大的匹配.即搜索凡是右边有三个f,则取第一个右边三个f中的第一个作为结束匹配的意思.在上一层的意思中只有f4成功.
所以匹配到的就是ffffff中的f1,f2,f3,f4
以999999999为例可以知道第一组是9,第二组和第三组是9
我的语文水平有限,希望能解释清楚了. |