首页 > tips > 一个匹配质数的perl正则表达式的分析

一个匹配质数的perl正则表达式的分析

2012年1月5日 发表评论 阅读评论

  网上有个牛人老外,用perl写了个匹配质数的正则表达式,就像这样:

perl -lne '(1x$_) =~ /^1?$|^(11+?)\1+$/ || print "$_ is prime"'

,这是个交互式的东东,运行后得你手工输入数值,脚本判断是否是质数,是就打印说啥啥是质数。这句简单的代码我仔细分析了下,终于大概弄懂了。首先,是把你输入的数,转换成输入数值个1的字串,然后进行匹配,匹配不上,则输入的数为质数。匹配的正则表达式又是两个表达式的合集(两个表达式是的关系)。
  第一个正则匹配表达式很简单:“

^1?$

”,就是用来匹配0个或1个”1″,也就是这两个数(0和1不是质数),关键在于第二个正则表达式:

^(11+?)\1+$

,显然3(字串是111)、5(字串是11111)匹配不了,是质数;4(爱传是1111)和6(字串是111111)能匹配上,是合数。至于其中寻找质数的逻辑,我也大概弄明白了,比如说,数字7,字串是1111111,匹配11(11)+匹配不了,尝试111(111)+也不行,1111(1111)+也不行,所以是质数;同理,数字9,字串是111111111,匹配11(11)+匹配不上,但是匹配111(111)+可以,所以9是质数。

分类: tips 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.