这个正则expression式是如何find素数的?
可能重复:
如何确定一个数是否是正则expression式的一个主要元素?
这个页面声称这个正则expression式发现了非素数(反例:素数):
/^1?$|^(11+?)\1+$/
这是如何find素数?
我认为这篇文章解释得相当好,但我也会试一试。
input是一元forms。 1是1
是111
是111
等。零是一个空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讨论中的几个人很好地解释了这一点。 其实这些解释比我想的要简单得多,所以我把它留给链接。