正则表达式和可分性

时间:2011-08-09 15:39:45

标签: php regex

如何创建一个正则表达式来测试一个数字是否可被i整除(2< = i< = 10),总共有8个表达式?人们只能假设整数是正数。您可以使用符号[]和[^],?,*和+,|和()。 PHP的ereg函数应该接受它。

4 个答案:

答案 0 :(得分:3)

除非这是一个家庭作业问题,否则在这种情况下没有理由使用正则表达式。

使用模数运算符,它为您提供剩余的值除以。

if($number%$i) { "This runs if $number modulus is not 0 (not evenly divisible by $i)" }
else { "This runs if $number modulus is 0 ( evenly Divisible by $i)" }

编辑:哦,这是一个面试问题。是的,这里的正确答案是“这不是解决这个问题的正确工具!”

答案 1 :(得分:1)

@Charles在他的评论中回答不正确。以下是如何通过3:http://alokmenghrajani.github.com/triple/构建可除性的正则表达式。你可以为7做类似的事情。

答案 2 :(得分:0)

只有将数字翻译为一元时才可以这样做(1 = 12 = 113 = 1114 = 1111等)。

然后,您可以检查您的号码是否与^(1{divisor})*$匹配。如果您无法使用{},则需要拼写出来。因此,要检查4的可分性,请尝试匹配^(1111)*$

但是,没有人会以正确的方式做到这一点。如果你的面试官要求你使用ereg,那么他的正则表达式知识已有几十年了。我猜。

答案 3 :(得分:0)

所以,显然你不会正常使用正则表达式...但人们会做疯狂的事情。那里有一个正则表达式来确定一个数字是否为素数......

关于如何寻求解决方案的想法,如果你被允许以另一种格式表示数字......

  • 将数字转换为数字1s等于数字大小的字符串(4 =“1111”)
  • regexp /^(1{$divisor})+$/

作为Tcl中的样本

proc testit {value} {
    set value1 [string repeat 1 $value]
    for {set i 2} {$i <= 10} {incr i} {
        set matches [regexp "^(1{$i})+$" $value1]
        puts "${i}: $matches"
    }
}

由于您无法使用{}构造,因此可以将1{$i}替换为等于i的数量。