Ruby正则表达式未在条件中验证?

Ruby正则表达式未在条件中验证?,ruby,regex,if-statement,Ruby,Regex,If Statement,我编写了第一个正则表达式和一个if条件来检查通过的def参数循环。 它似乎工作不正常,我猜我的正则表达式有问题。该条件运行,但它表示当值与我想要的模式匹配时,该值与正则表达式不匹配,反之亦然 我需要的模式如下:123456\u 12345\u ABC\u 123: 6 digits underscore 5 digits (may include 0 padding) underscore 3 upper case letters underscore 3 digits (may includ

我编写了第一个正则表达式和一个
if
条件来检查通过的
def
参数循环。 它似乎工作不正常,我猜我的正则表达式有问题。该条件运行,但它表示当值与我想要的模式匹配时,该值与正则表达式不匹配,反之亦然

我需要的模式如下:
123456\u 12345\u ABC\u 123

6 digits 
underscore
5 digits (may include 0 padding)
underscore
3 upper case letters
underscore
3 digits (may include 0 padding)
这是我的密码:

if ev_val.match(/[0-9]{6}(_)[0-9]{5}(_)[a-z]{3}(_)[0-9]{3}/)

    puts "#{ev_val} matches required batch naming convention"
else
    puts "#{ev_val} doesn't match required batch naming convention\nSTOPPING SCRIPT!!!"
    exit
end
如果有人有任何想法,我将不胜感激

而不是:

/[0-9]{6}(_)[0-9]{5}(_)[a-z]{3}(_)[0-9]{3}/
您可以使用:

/\d{6}_\d{5}_[A-Z]{3}_\d{3}/
  • \d
    是一个数字,也称为
    [0-9]
    ,所以你应该习惯使用这个缩写
  • 无法在代码中完成任何任务,因此不要捕获下划线,只需使用
  • [a-z]
    捕获所有小写字母。您需要大写字母,因此请使用
    [A-Z]

很好,但是你应该添加
0*
,他说
可能包括0填充
(除非我读错了)。谢谢你的两个回复!我首先有\d,但我读到它正好是1位数字,所以我认为这就是它不起作用的原因。我也读过括号寻找文字字符,这就是为什么我在括号中加下划线。看来我还有很多要学的!我一直在避免它,但我知道学习它将给我在编码方面带来巨大的优势。是的,任何数字都是0填充的(一直到第一个数字)。我会试着查一下。但是如果有人懂速记,我非常感激。没关系。我知道了/谢谢!作为旁注。即使末尾有字符,也会找到字符串。它通过了除123456_12345_ABC_123zz之外的所有测试,因为zz,它不应该通过,但它确实通过了。这是一个csv,周围有双引号。当脚本评估它时,双引号被去掉了,但我不知道为什么它允许在结尾添加额外的字符。