2013-10-24 56 views
0

我寫了我的第一個正則表達式和一個if條件來檢查通過的def參數循環。 它似乎沒有正常工作,並且我猜測我的正則表達式有問題。條件運行,但它說,當它符合我想要的模式時,該值與正則表達式不匹配,反之亦然。Ruby正則表達式在條件中沒有驗證嗎?

我需要的模式是這樣的: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 

如果任何人有任何想法,我將不勝感激!

回答

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]
+0

好,但你應該在'他可以包括0填充'的地方加'0 *''(除非我讀錯了) – pguardiario

+0

謝謝你的迴應!我首先得到了\ d,但是我已經讀過它的確是1位數字,所以我認爲這就是爲什麼它不起作用。我也讀過圓括號,這就是爲什麼我把下劃線放在其中。看起來我有很多要學習的正則表達式!我一直在避免它,但我知道學習它會給我在編碼方面帶來很大的優勢。 是的,任何數字都是0填充(一直到第一個數字)。我會試着去看看。但如果有人知道速記,我非常感激。 –

+0

沒關係。我想到了!/0 * \ d {6} _0 * \ d {5} _ [A-Z] {3} _0 * \ d {3} /謝謝! –