English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Expresiones regulares de Scala

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

Expresión regular

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ónRegla 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".
\\ACoincide con la posición de inicio de la cadena de entrada (sin soporte para múltiples líneas)
\\zFinal de la cadena (similar a $, pero no afectado por la opción de procesar múltiples líneas)
\\ZFinal 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|bCoincide 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
\\wCoincide 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
\\sCoincide con cualquier espacio en blanco, equivalente a [\t\n\r\f]
\\SCoincide con cualquier carácter que no sea un espacio en blanco
\\dCoincide con números, algo así como [0-9]
\\DCoincide con cualquier carácter no numérico
\\GInicio de la búsqueda actual
\\nCarro nuevo de línea
\\bGeneralmente es una posición de delimitador de palabra, pero si se utiliza dentro de un conjunto de caracteres representa retroceso
\\BCoincide con la posición no inicial de la palabra o no final
\\tTabulador
\\QInicio de comillas:\Q(a+b)*3\E Puede coincidir con el texto "(a+b)*3"。
\\EFinal de comillas:\Q(a+b)*3\E Puede coincidir con el texto "(a+b)*3"。

Ejemplo de expresión regular

EjemploDescripción
.Coincide con cualquier carácter individual diferente a "\r\n".
[Rr]ubyCoincide 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
\\dCoincide con números, algo así como: [0-9]
\\DCoincide con caracteres no numéricos, algo así como: [^0-9]
\\sCoincide con espacios en blanco, algo así como: [ \t\r\n\f]
\\SCoincide con caracteres no espacios en blanco, algo así como: [^ \t\r\n\f]
\\wCoincide 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