Ruby正则表达式封闭总是返回false

时间:2010-09-20 23:24:45

标签: ruby regex closures

我正在设置一个简单的检查程序。现在,它非常简单,并且是jsut检查整数。我不认为正则表达式是错误的,但我是ruby的新手。

测试自动正则表达式

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次。这是不可能的。

2 个答案:

答案 0 :(得分:3)

我认为您需要从/中删除predefinedRegex个字符。 Regexp.new的参数应该是创建正则表达式的模式。

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

此外,根据您的目标,您可能需要在表达式中使用锚点字符(^$)。

答案 1 :(得分: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]+/
}

(删除了引号)。 但是你可以跳过整个关闭的事情。