这个正则expression式是如何find素数的?

可能重复:
如何确定一个数是否是正则expression式的一个主要元素?

这个页面声称这个正则expression式发现了非素数(反例:素数):

/^1?$|^(11+?)\1+$/ 

这是如何find素数?

我认为这篇文章解释得相当好,但我也会试一试。

input是一元forms。 1是1111111等。零是一个空string。

正则expression式的第一部分匹配0和1作为非素数。 其次是魔法的地方。

(11+?)find除数。 它被定义为11或2开始。 \1是一个指向先前捕获的匹配的variables,所以\1+确定数字是否可被该除数整除。 ( 111111通过将variables分配给11 ,然后确定剩余的1111被重复11 ,所以6可以被2整除)

如果数字不能被2整除,则正则expression式引擎将递增除数。 (11+?)变成111 ,我们再试一次。 如果在正则expression式匹配的任何一点,数字有一个除数,不产生余数,所以数字不能是素数。

花了我一分钟,意识到这是针对基数1(一元?)的数字

这个yCombinator讨论中的几个人很好地解释了这一点。 其实这些解释比我想的要简单得多,所以我把它留给链接。