array - ruby substring
Ruby: ¿Cómo saber si un personaje es una letra o un dígito? (2)
Acabo de empezar a jugar con Ruby a principios de esta semana y me he encontrado con algo que no sé cómo codificar. Estoy convirtiendo un escáner que fue escrito en Java en Ruby para una tarea de clase, y he llegado a esta sección:
if (Character.isLetter(lookAhead))
{
return id();
}
if (Character.isDigit(lookAhead))
{
return number();
}
lookAhead
es un solo carácter seleccionado de la cadena (que se mueve un espacio cada vez que se desplaza) y estos dos métodos determinan si es un carácter o un dígito, y devuelve el tipo de token apropiado. No he podido averiguar un equivalente de Ruby con Character.isLetter()
y Character.isDigit()
.
La forma más sencilla sería usar una expresión regular:
def numeric?(lookAhead)
lookAhead =~ /[0-9]/
end
def letter?(lookAhead)
lookAhead =~ /[A-Za-z]/
end
Use una expresión regular que coincida con letras y dígitos:
def letter?(lookAhead)
lookAhead =~ /[[:alpha:]]/
end
def numeric?(lookAhead)
lookAhead =~ /[[:digit:]]/
end
Estas se denominan expresiones de corchetes POSIX, y la ventaja de ellas es que los caracteres Unicode en la categoría dada coincidirán. Por ejemplo:
''ñ'' =~ /[A-Za-z]/ #=> nil
''ñ'' =~ //w/ #=> nil
''ñ'' =~ /[[:alpha:]]/ #=> 0
Puedes leer más en los documentos de Ruby para expresiones regulares .