从这篇文章中,
使用此方法,
我对Perl不够熟悉,但我理解的是公式将对非质数产生真正的结果。因此,如果我们列印所有未与此表达式产生真正结果的数字,则会得到一个质数列表。这就是perl查询试图做的事情。
关于正则表达式部分,
/^1?$|^(11+?)\1+$/
检查一个数(在一元下的值)是否为质数。使用此方法,
perl -l -e '(1 x $_) !~ /^1?$|^(11+?)\1+$/ && print while ++$_;'
返回一个质数列表。我对Perl不够熟悉,但我理解的是公式将对非质数产生真正的结果。因此,如果我们列印所有未与此表达式产生真正结果的数字,则会得到一个质数列表。这就是perl查询试图做的事情。
关于正则表达式部分,
^1?$
部分用于将1计算为非质数
^(11+?)\1+$用于匹配从4开始的非素数。
我不明白的是为什么正则表达式中需要?
。
据我所知,/^1$|^(11+)\1+$/
应该足够了,实际上
perl -l -e '(1 x $_) !~ /^1$|^(11+)\1+$/ && print while ++ $_;'
给我相同的质数集。
我的正则表达式理解有什么缺陷?为什么需要?
?
?不应该匹配前面的表达式的零或一个出现吗?
+?
和*?
,它还可以在哪些地方使用?我认为?
表示匹配零次或一次。 - Lazer?
会使得该量词变成非贪婪模式。请参考 http://perldoc.perl.org/perlre.html#Quantifiers。 - cjm