如何创建一个正则表达式来测试一个数字是否可被i整除(2< = i< = 10),总共有8个表达式?人们只能假设整数是正数。您可以使用符号[]和[^],?,*和+,|和()。 PHP的ereg函数应该接受它。
答案 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
= 1
,2
= 11
,3
= 111
,4
= 1111
等)。
然后,您可以检查您的号码是否与^(1{divisor})*$
匹配。如果您无法使用{}
,则需要拼写出来。因此,要检查4的可分性,请尝试匹配^(1111)*$
等
ereg
,那么他的正则表达式知识已有几十年了。我猜。
答案 3 :(得分:0)
所以,显然你不会正常使用正则表达式...但人们会做疯狂的事情。那里有一个正则表达式来确定一个数字是否为素数......
关于如何寻求解决方案的想法,如果你被允许以另一种格式表示数字......
/^(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的数量。