あなたはここで正しい軌道に乗っていますが、非常に独特のコーディングスタイルがあります。まず、==
のような比較では、ブール値がtrue
またはfalse
であることが返されるため、if
が全く同じ結果を返す理由はありません。
もう1つは、文字列を別の文字列と比較しているため、と一致する必要があります。正確にはです。十分に近いとカウントされません。あなたが他の文字列を評価する場合は、混乱を取得する:あなたが正規表現に対して文字列をテストしようとしている場合
"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
メソッドよりも高速ですが、ループ内で多くのマッチを実行している場合にのみ重要です。
あなたがここで何をしようとしているのかは本当に不明です。たぶんあなたの目標を平易な英語で説明する方が良いでしょう。 –
正規表現を探していますか? 'if" FIX_STRING 0,0、DYNAMIC_STRING ".match(/ FIX_STRING [0-5]、[0-5]、[A-Z _] + /)true以外else false end '? DYNAMIC_STRING全体またはAからDまでの大文字の文字と一致する必要がありますか?より正確に質問してください。 – guitarman