今週初めにRubyをいじくり始めたところ、コーディングの仕方がよくわからない何かに出くわしました。クラスの割り当てのためにJavaで書かれたスキャナーをRubyに変換しています。このセクションに行きました:
_if (Character.isLetter(lookAhead))
{
return id();
}
if (Character.isDigit(lookAhead))
{
return number();
}
_
lookAhead
は文字列から選択された単一の文字(ループするたびに1スペースずつ移動します)であり、これら2つのメソッドは文字か数字かを判断し、適切なトークンタイプを返します。 Character.isLetter()
およびCharacter.isDigit()
と同等のRubyを見つけることができませんでした。
文字と数字に一致する正規表現を使用します。
def letter?(lookAhead)
lookAhead =~ /[[:alpha:]]/
end
def numeric?(lookAhead)
lookAhead =~ /[[:digit:]]/
end
これらはPOSIXブラケット式と呼ばれ、それらの利点は、指定されたカテゴリのUnicode文字が一致することです。例えば:
'ñ' =~ /[A-Za-z]/ #=> nil
'ñ' =~ /\w/ #=> nil
'ñ' =~ /[[:alpha:]]/ #=> 0
詳しくは Rubyの正規表現のドキュメント をご覧ください。
最も簡単な方法は、正規表現を使用することです。
def numeric?(lookAhead)
lookAhead =~ /[0-9]/
end
def letter?(lookAhead)
lookAhead =~ /[A-Za-z]/
end