0

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

我需要的模式是这样的123456_12345_ABC_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

如果有人有任何想法,我将不胜感激!

4

1 回答 1

2

代替:

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

您可以使用:

/\d{6}_\d{5}_[A-Z]{3}_\d{3}/
  • \d是一个数字,AKA [0-9],所以你应该习惯使用那个速记。
  • (_)不会在您的代码中完成任何操作,因此不要捕获下划线,而只需使用_.
  • [a-z]捕获所有小写字母。你想要大写,所以使用[A-Z].
于 2013-10-24T22:05:36.810 回答