28

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

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

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

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

4

3 に答える 3

56

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

def letter?(lookAhead)
  lookAhead.match?(/[[:alpha:]]/)
end

def numeric?(lookAhead)
  lookAhead.match?(/[[:digit:]]/)
end

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

'ñ'.match?(/[A-Za-z]/)     #=> false
'ñ'.match?(/\w/)           #=> false
'ñ'.match?(/[[:alpha:]]/)  #=> true

正規表現に関する Ruby のドキュメントで詳細を読むことができます。

于 2013-01-27T20:36:51.463 に答える
14

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

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

def letter?(lookAhead)
  lookAhead =~ /[A-Za-z]/
end
于 2013-01-27T19:30:50.310 に答える