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

发布于 2024-09-24 05:29:04 字数 759 浏览 5 评论 0原文

我正在设置一个简单的检查程序。目前,它非常简单,只是检查整数。我不认为正则表达式有错,但我对 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

つ可否回来 2024-10-01 05:29:04

我相信您需要从 predefinedRegex 中删除 / 字符。 Regexp.new 的参数预计是一个模式,其中正则表达式已创建。

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

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

I believe you need to remove the / characters from predefinedRegex. The parameter to Regexp.new is expected to be a pattern from which the regular expression is created.

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

In addition, depending on what your goal is, you might want anchor characters (^ and $) in the expressions.

述情 2024-10-01 05:29:04

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

(删除斜杠)

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

删除引号)。
但这样你就可以跳过整个关闭的事情。

either

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

(removed slashes)

or

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

(removed quotes).
But then you can skip the whole closure thing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文