web-dev-qa-db-ja.com

Ruby:文字が文字か数字かを調べる方法は?

今週初めにRubyをいじくり始めたところ、コーディングの仕方がよくわからない何かに出くわしました。クラスの割り当てのためにJavaで書かれたスキャナーをRubyに変換しています。このセクションに行きました:

_if (Character.isLetter(lookAhead))
{      
    return id();
}

if (Character.isDigit(lookAhead))
{
    return number();
}
_

lookAheadは文字列から選択された単一の文字(ループするたびに1スペースずつ移動します)であり、これら2つのメソッドは文字か数字かを判断し、適切なトークンタイプを返します。 Character.isLetter()およびCharacter.isDigit()と同等のRubyを見つけることができませんでした。

22
Cory Regan

文字と数字に一致する正規表現を使用します。

def letter?(lookAhead)
  lookAhead =~ /[[:alpha:]]/
end

def numeric?(lookAhead)
  lookAhead =~ /[[:digit:]]/
end

これらはPOSIXブラケット式と呼ばれ、それらの利点は、指定されたカテゴリのUnicode文字が一致することです。例えば:

'ñ' =~ /[A-Za-z]/    #=> nil
'ñ' =~ /\w/          #=> nil
'ñ' =~ /[[:alpha:]]/   #=> 0

詳しくは Rubyの正規表現のドキュメント をご覧ください。

42
Andrew Marshall

最も簡単な方法は、正規表現を使用することです。

def numeric?(lookAhead)
  lookAhead =~ /[0-9]/
end

def letter?(lookAhead)
  lookAhead =~ /[A-Za-z]/
end
14
PinnyM