1

我有以下條件:動態條件

if "FIX_STRING 0,0,DYNAMIC_STRING" == "FIX_STRING #{integer_from_0_to_5},#{integer_from_0_to_5},#{DYNAMIC_STRING}" 
    true 
else 
    false 
end 

如何對其進行的動態也是這樣嗎?

if "FIX_STRING 0,0,DYNAMIC_STRING" == "FIX_STRING #{/0|1|2|3|4|5/},#{/0|1|2|3|4|5/},#{/A|B|C|D/}" 
    true 
else 
    false 
end 
+2

真的不清楚你要在這裏做什麼。也許用純英文描述你的目標會更好。 –

+0

您是否正在尋找這樣的正則表達式:'if「FIX_STRING 0,0,DYNAMIC_STRING」.match(/ FIX_STRING [0-5],[0-5],[A-Z _] + /)then true else false end '?是否必須僅匹配從A到D的整個DYNAMIC_STRING或大寫字母?請更準確地問你的問題。 – guitarman

回答

2

你在這裏是正確的軌道,但你有一個非常獨特的編碼風格。首先要指出的是,比較==已經返回一個布爾值truefalse,沒有理由if然後返回完全相同的東西。

第二件事是你要比較一個字符串與另一個字符串,所以他們必須匹配剛好。足夠接近不計數。如果您評估其他字符串你得到一個爛攤子:

"FIX_STRING (?-mix:0|1|2|3|4|5),(?-mix:0|1|2|3|4|5),(?-mix:A|B|C|D)" 

最後,如果你想測試一個字符串與正則表達式,你這樣做:

PATTERN = /\AFIX_STRING [0-5],[0-5],[A-D]\z/ 

你可以測試這種在Rubular上做的事情做得對。這裏[0-5]表示該範圍內的任何東西。這對你所擁有的東西來說是短暫的。

然後你就可以對這種模式測試任意字符串:

"FIX_STRING 3,4,D".match(PATTERN) 
# => #<MatchData "FIX_STRING 3,4,D"> 

那麼匹配。

較新版本的Ruby有一個match?方法只測試匹配,它不會返回匹配的內容,如果您在2.3或更高版本上運行,您可能會使用它。它比簡單的match方法更快,但只有在循環內部進行大量匹配時纔有意義。

+1

Ruby 2.4將引入'Regexp#match?',它返回'true'或'false'並且不設置全局變量。但是'match?'在2.3中不可用,我認爲2.4中沒有'String#match?'。 – Stefan

+0

@Stefan啊,你說得對,那是2.4的東西。 – tadman