2010-09-20 55 views
1

進出口設立一個簡單的檢查程序的事情。目前,它非常簡單,只需檢查整數。我不認爲正則表達式是錯的,但我對ruby是新手。紅寶石關閉的正則表達式始終返回false

檢驗出自動正則表達式

def createRegexClosure(re) 
     reg = Regexp.new(re) 
     return lambda { |t| 
      return reg.match(t) 
     } 
end 

predefinedRegex = { 
     '+int' => '/[1-9][0-9]*/', 
     'int' => '/-?[0-9]+/', 
     '-int' => '/-[0-9]+/' 
} 

positiveInt = createRegexClosure(predefinedRegex['+int']) 
normalInt = createRegexClosure(predefinedRegex['int']) 
negativeInt = createRegexClosure(predefinedRegex['-int']) 

puts positiveInt.call('5932423') ? 'good' : 'bad' 
puts normalInt.call('0') ? 'good' : 'bad' 
puts normalInt.call('-2121') ? 'good' : 'bad' 
puts negativeInt.call('-32332') ? 'good' : 'bad' 

,並打印出壞4次連勝。這不可能。

回答

3

我相信你需要從predefinedRegex刪除/字符。到Regexp.new參數預計是從中創建所述正則表達式的圖案。

predefinedRegex = { 
     '+int' => '[1-9][0-9]*', 
     'int' => '-?[0-9]+', 
     '-int' => '-[0-9]+' 
} 

此外,根據您的目標是什麼,你可能想在表達式錨字符(^$)。

2

predefinedRegex = { 
    '+int' => '[1-9][0-9]*', 
    'int' => '-?[0-9]+', 
    '-int' => '-[0-9]+' 
} 

(除去斜線)

predefinedRegex = { 
    '+int' => /[1-9][0-9]*/, 
    'int' => /-?[0-9]+/, 
    '-int' => /-[0-9]+/ 
} 

(除去引號)。 但是,你可以跳過整個封閉的事情。

+0

+1「你可以跳過整個封閉的東西。」不必要的複雜性。 – 2010-09-21 01:48:41