我觉得这篇文章讲解得相当清楚,但我也会尝试解释一下。
输入以“一元”形式表示。1为1
,2为11
,3为111
,以此类推。零是一个空字符串。
正则表达式的第一部分将0和1视为非质数。接下来,神奇的事情发生在第二部分。
(11+?)
开始寻找除数。它首先定义为11
,即2。\1
是指之前捕获的匹配项,因此\1+
判断数字是否可以被该除数整除。(例如111111
将变量分配为11
,然后确定剩余的1111
是11
重复,因此6可以被2整除。)
如果数字不能被2整除,正则表达式引擎会增加除数。 (11+?)
变成111
,我们再次尝试。如果在任何时候正则表达式匹配成功,则该数字具有可产生无余数的除数,因此该数字不是质数。
[#start_line [ | '1' | [capture:factor 1+ '11'] [1+ #repeat:factor] ] #end_line]
。 - Aur Saraf
^(?!1?$|(11+?)\1+$)1+$
这个正则表达式可以找到实际的质数,它使用了负向前瞻。 - Wilson