Ruby 正则表达式闭包总是返回 false
我正在设置一个简单的检查程序。目前,它非常简单,只是检查整数。我不认为正则表达式有错,但我对 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 次打印出错误。这是不可能的。
Im setting up a simple checker program thing. For now, its extremely simple and is jsut checking integers. I dont think the regular expressions are wrong, but I am new to ruby.
testing out the auto-regex
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'
and it prints out bad 4 times in a row. This is not possible.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我相信您需要从
predefinedRegex
中删除/
字符。 Regexp.new 的参数预计是一个模式,其中正则表达式已创建。此外,根据您的目标,您可能需要在表达式中使用锚字符(
^
和$
)。I believe you need to remove the
/
characters frompredefinedRegex
. The parameter to Regexp.new is expected to be a pattern from which the regular expression is created.In addition, depending on what your goal is, you might want anchor characters (
^
and$
) in the expressions.或
(删除斜杠)
(
删除引号)。
但这样你就可以跳过整个关闭的事情。
either
(removed slashes)
or
(removed quotes).
But then you can skip the whole closure thing.