2013-06-21 27 views
0

說我建一個這樣的數組:紅寶石包括動態字母和符號

:001 > holder = "This.File.Q99P84.Is.Awesome" 
=> "This.File.Q99P84.Is.Awesome" 
:002 > name = holder.split(".") 
=> ["This", "File", "Q99P84", "Is", "Awesome"] 

現在,我可以這樣做:

name[2].include? 'Q99P84' 

而不是把在「Q99P84」我希望把類似於'符號Q',其次爲 符號爲數字,符號爲數字,符號爲P,符號爲數字,符號爲
所以.include?功能將是動態的。因此,我加載的具有Q ## P ##的任何文件名將返回true

我很確定這可能是我只是不知道要搜索什麼。如果您知道答案,您可以將我鏈接到文檔。

+3

這稱爲「正則表達式」。嘗試谷歌他們。 –

回答

0

的一種方式做,這是通過正則表達式(簡稱「正則表達式」)。兩個很好的信息來源是Regular Expression.infoRubular,這是更以Ruby爲中心的。使用正則表達式的字符串

一種方法是String#match方法:

names[2].match(/Q\d\dP\d\d/) # /d stands for digit 

這將返回字符串,如果有匹配,它將返回nil如果沒有。

"Q42P67".match(/Q\d\dP\d\d/) #=> "Q42P67" 
"H33P55".match(/Q\d\dP\d\d/) #=> nil 

這是一家if條件幫助的,因爲返回的字符串爲「truthy」和nil是「假」。

names[2] = "Q42P67" 
if names[2].match(/Q\d\dP\d\d/) 
    # Will execute code here 
end 

names[2] = "H33P55" 
if names[2].match(/Q\d\dP\d\d/) 
    # Will not execute code here 
end 

我希望這有助於您進一步深入研究正則表達式。

編輯: 請注意,/Q\d\dP\d\d/中的Q和P是大寫字母。如果案例不重要,可以在不區分大小寫的情況下附加'i'。 /Q\d\dP\d\d/i將捕獲「Q42P67」和「q42P67」

3

您正在尋找的是正則表達式匹配。紅寶石將幫助你。你想要的是像

/Q[\d+]P[\d+]/.match(name[2]) 

...這將返回truthy值,如果name[2]具有相匹配的字符Q,一個或多個數字(0-9)的字符串,字符P,那麼一個或更多數字。如果您想要的圖案在這些數字空間中恰好有兩位數,則這可能過於靈活;對於您可以嘗試一個更具體的模式:

/Q\d\dP\d\d/.match(name[2])