2011-08-09 71 views
4

如何創建一個正則表達式來測試一個數是否可​​以被我整除(2 < = i < = 10),共8個表達式?人們只能假設整數是正數。您可以使用符號[]和[^],?,*和+,|和()。 PHP的ereg函數應該接受它。正則表達式和可分性

+0

爲什麼是正則表達式?爲什麼不把這個數字分開呢?正則表達式不是正確的工具。 –

+7

我討厭像這樣的採訪。正則表達式不應該像這樣使用。我可以在我的散熱器上煮雞蛋,但這樣做會對我的散熱器造成不良影響。 –

+0

*嗅嗅*我聞到家庭作業。在那做壞功課。 – sberry

回答

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)" } 

編輯:哦,這是一個面試問題。是的,這裏的正確答案是「這不是解決這個問題的正確工具!」

+0

@Alok具有以下正確的解決方案。正則表達式 - >有限狀態機。 – Lotus

0

此,如果你轉換到一元(1 = 12 = 113 = 1114 = 1111等)的數量是唯一可能的。

然後你可以檢查你的號碼是否匹配^(1{divisor})*$。如果你不能使用{},你需要把它拼出來。因此,要檢查4的可分性,請嘗試匹配^(1111)*$等。

儘管如此,沒有人在他們的正確思想中這樣做。如果你的面試官要求你使用ereg,那麼他的正則表達式知識就有幾十年的歷史了。

+0

我想我需要第一個reqexp將4_10轉換爲1111_2。一般的轉換器可能很難做到。 – amateurprogrammer

+0

@amateurprogrammer:這是絕對不可能使用正則表達式。但使用正則表達式在10進制中檢查除數也是不可能的。 –

+0

@Tim,對於某些特定的整數是可能的,例如2,5,10。但這可能不是面試官所期望的。 –

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" 
    } 
} 

由於您不能使用{}結構,因此可以用等於i的數字替換1{$i}

+0

沒有正則表達式可以確定字符串是否是素數的十進制表示形式。使一個匹配素數的一元表示(並且容易使其與一元表示的複合體相匹配)並不難。 – Charles

1

@Charles在他的評論中的回答是不正確的。這裏是你如何建立一個可分性的正則表達式3:http://alokmenghrajani.github.com/triple/。你可以做類似的東西7.

+0

這完全是正確的答案。謝謝你,阿洛克。 – Lotus