2010-09-20 56 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