Рубиновые регулярные выражения всегда возвращают false - PullRequest
1 голос
/ 21 сентября 2010

Я настраиваю простую программу проверки. На данный момент это очень просто и просто проверяет целые числа. Я не думаю, что регулярные выражения неправильны, но я новичок в 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 ]

3 голосов
/ 21 сентября 2010

Полагаю, вам нужно удалить символы / из predefinedRegex. Предполагается, что параметр Regexp.new будет шаблоном, из которого создается регулярное выражение.

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

Кроме того, в зависимости от вашей цели в выражениях могут потребоваться символы привязки (^ и $).

2 голосов
/ 21 сентября 2010

либо

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

(убрал косую черту)

или

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

(удалены кавычки). Но тогда вы можете пропустить всю вещь о закрытии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...