2016-10-10 7 views
-6

/^a-eg-h/.match('f')は、Rubyインタプリタ(2.3.1)で私にnilを与えます。私は何が間違っているのか理解できません。/^a-eg-h/.match('f ')はRubyでnullを返します

提案がありますか?

Rubyドキュメントの状態 'above expressionは#<MatchData "f">'を返します。

+1

のようになります。あなたの正規表現は 'a-eg-h'で始まる文字列にのみマッチします。あなたは '[]'の中で定義されている範囲を探すのがもっともです。 –

+0

あなたは '/ [^ a-eg-h] /。( 'f')'ではなく、 '/^a-eg-h/.match'(' f ') 'とマッチすることを意味します。 –

答えて

1

コメントに記載されているとおり、パターンが正しくありません。 character classを使用しようとしていますが、角かっこで囲まれていないようです。あなたのパターンは現在のように、リテラルテキストa-eg-hで始まる文字列にのみ一致します。あなたが望むパターンは次のとおりです。また

/[^a-eg-h]/ 

、文字列がパターンに一致しないと、失敗して、Rubyでnilを返します。このパターンで文字列jに一致するようにしよう。この問題を解決するには、

match = /[^a-eg-h]/.match(str) 
if (match) 
    do_something() 
end 
+0

@ t.niese:固定、ありがとう。 –

+0

_ "文字列fとこのパターンを一致させようとすると失敗します" _ - どういう意味ですか? '/ [^ a-eg-h] /。match( 'f')'はうまく動作します。 – Stefan

関連する問題