English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Scala utiliza el paquete scala.util.matching para Regex Clase para soportar expresiones regulares. A continuación, se muestra un ejemplo de cómo usar expresiones regulares para buscar palabras. Scala :
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = "Scala".r val str = "Scala es Scalable y genial" println(pattern findFirstIn str) } }
Ejecutar el código anterior, el resultado de salida será:
$ scalac Test.scala $ scala Test Some(Scala)
En el ejemplo se utiliza el método r() de la clase String para construir un objeto Regex.
Luego, use el método findFirstIn para encontrar el primer elemento coincidente.
Si necesita ver todos los elementos coincidentes, puede usar el método findAllIn.
Puede usar el método mkString( ) para conectar las cadenas de resultados de la coincidencia de expresiones regulares y puede usar el pipe (|) para establecer diferentes patrones:
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("(S|s)cala") // La primera letra puede ser mayúscula S o minúscula s val str = "Scala es escalable y genial" println((pattern findAllIn str).mkString( // Conectar los resultados devueltos utilizando una coma , } }
Ejecutar el código anterior, el resultado de salida será:
$ scalac Test.scala $ scala Test Scala,scala
Si necesita reemplazar el texto coincidente con una palabra clave específica, puede usar replaceFirstIn( ) Método para reemplazar el primer elemento coincidente, utilizando replaceAllIn( ) Método para reemplazar todos los elementos coincidentes, ejemplo a continuación:
object Test { def main(args: Array[String]) { val pattern = "(S|s)cala".r val str = "Scala es escalable y genial" println(pattern replaceFirstIn(str, "Java")) } }
Ejecutar el código anterior, el resultado de salida será:
$ scalac Test.scala $ scala Test Java es escalable y genial
Las expresiones regulares de Scala heredan las reglas de sintaxis de Java, y Java utiliza principalmente las reglas del lenguaje Perl.
A continuación, se proporcionan algunas reglas de expresiones regulares comunes:
Expresión | Regla de expresión regular |
---|---|
^ | Coincide con la posición inicial de la cadena de entrada. |
$ | Coincide con la posición final de la cadena de entrada. |
. | Coincide con cualquier carácter individual diferente a "\r\n". |
[...] | Conjunto de caracteres. Coincide con cualquier carácter incluido. Por ejemplo, "[abc]" coincide con "plain" en "a". |
[^...] | Conjunto inverso de caracteres. Coincide con cualquier carácter no incluido. Por ejemplo, "[^abc]" coincide con "plain" en "p", "l", "i", "n". |
\\A | Coincide con la posición de inicio de la cadena de entrada (sin soporte para múltiples líneas) |
\\z | Final de la cadena (similar a $, pero no afectado por la opción de procesar múltiples líneas) |
\\Z | Final de la cadena o final de la línea (no afectado por la opción de procesar múltiples líneas) |
re* | Repetir cero veces o más veces |
re+ | Repetir una vez o más |
re? | Repetir cero veces o una vez |
re{ n} | Repetir n veces |
re{ n,} | Repetir n veces o más |
re{ n, m} | Repetir n a m veces |
a|b | Coincide con a o b |
(re) | Coincide con re, y captura el texto en un grupo automático nombrado |
(?: re) | Coincide con re, sin capturar el texto coincidente ni asignar un número de grupo a este grupo |
(?> re) | Expresión regular ambiciosa |
\\w | Coincide con una letra o un número o un guión bajo o un carácter chino |
\\W]} | Coincide con cualquier carácter que no sea una letra, un número, un guión bajo o un carácter chino |
\\s | Coincide con cualquier espacio en blanco, equivalente a [\t\n\r\f] |
\\S | Coincide con cualquier carácter que no sea un espacio en blanco |
\\d | Coincide con números, algo así como [0-9] |
\\D | Coincide con cualquier carácter no numérico |
\\G | Inicio de la búsqueda actual |
\\n | Carro nuevo de línea |
\\b | Generalmente es una posición de delimitador de palabra, pero si se utiliza dentro de un conjunto de caracteres representa retroceso |
\\B | Coincide con la posición no inicial de la palabra o no final |
\\t | Tabulador |
\\Q | Inicio de comillas:\Q(a+b)*3\E Puede coincidir con el texto "(a+b)*3"。 |
\\E | Final de comillas:\Q(a+b)*3\E Puede coincidir con el texto "(a+b)*3"。 |
Ejemplo | Descripción |
---|---|
. | Coincide con cualquier carácter individual diferente a "\r\n". |
[Rr]uby | Coincide con "Ruby" o "ruby" |
rub[ye] | Coincide con "ruby" o "rube" |
[aeiou] | Coincide con letras minúsculas :aeiou |
[0-9] | Coincide con cualquier número, algo así como [0123456789] |
[a-z] | Coincide con cualquier letra minúscula ASCII |
[A-Z] | Coincide con cualquier letra mayúscula ASCII |
[a-zA-Z0-9] | Coincide con números y letras mayúsculas y minúsculas |
[^aeiou] | Coincide con caracteres diferentes a aeiou |
[^0-9] | Coincide con caracteres diferentes a números |
\\d | Coincide con números, algo así como: [0-9] |
\\D | Coincide con caracteres no numéricos, algo así como: [^0-9] |
\\s | Coincide con espacios en blanco, algo así como: [ \t\r\n\f] |
\\S | Coincide con caracteres no espacios en blanco, algo así como: [^ \t\r\n\f] |
\\w | Coincide con letras, números, guiones bajos, algo así como: [A-Za-z0-9_] |
\\W]} | Coincidencia de no letras, números, guiones bajos, similares: [^A-Za-z0-9_] |
ruby? | Coincidencia "rub" o "ruby": y es opcional |
ruby* | Coincidencia "rub" más 0 número o más de y. |
ruby+ | Coincidencia "rub" más 1 número o más de y. |
\\d{3} | Coincidencia exacta 3 número. |
\\d{3,} | Coincidencia 3 número o más. |
\\d{3,5} | Coincidencia 3 y4 o 5 número. |
\\D\\d+ | Sin grupo: + Repetir \d |
(\\D\\d)+/ | Grupo: + Repetir \D\d |
([Rr]uby(, )?)+ | Coincidencia de "Ruby", "Ruby, ruby, ruby", etc. |
Note que cada carácter en la tabla superior se utiliza con dos barras invertidas. Esto se debe a que en Java y Scala, el carácter de barra invertida en una cadena es un carácter de escape. Por lo tanto, si desea output \, debe escribir \\ en la cadena para obtener una barra invertida. Vea el siguiente ejemplo:
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("abl[ae]\d+") val str = "ablaw is able1 y genial println((pattern findAllIn str).mkString( } }
Ejecutar el código anterior, el resultado de salida será:
$ scalac Test.scala $ scala Test able1