最近在学习正则表达式,在测试练习的时候遇到了一个下面图片中的问题,就是要匹配所有 质数个 字符,就是需要匹配下面图片左边所有的字符串,不能匹配右边所有的字符串。
图片如下图所示:
有没有大神给出一个正确的正则表达式匹配规则。
去找了一下 参考答案:为^(?!(..+)\1+$)
。 或者解释一下这个答案的正则表达式的意思。
刚看了下,大概解释下答案吧~
^,$就不用多说了,一个表开始,一个表结尾
?! 表示前瞻,即在开始匹配时,向那些没有匹配到的元素预先看一下,是否符合匹配结果。
(..+) 这里是一个捕获,后面的 \1引用的就是这里捕获的内容。至于这里为什么不是.+或者...+是因为,质数是从2开始的,而这里也包含了一个被忽略的内容,即字符串长度为0和1时,应先排除掉再使用这个正则。否则对0和1也将判定为质数。
合起来的意思就是:从2开始,先判断是否为2+2,3+3, 4+4, 5+5,也就是用字符串长度去除以2~string.length,如果整除则不是质数,注意我们前面的否定式前瞻,如果不能匹配,则为质数,返回true。事实上,如果知道字符串长度,只需要从2到根号下字符串长度去除就可以了。