Latest web development tutorials

Las expresiones regulares Scala

Scala porscala.util.matching tipos de paquetes de clase Regex para apoyar las expresiones regulares.El siguiente ejemplo muestra el uso de la expresión regular de búsqueda de palabrasScala:

import scala.util.matching.Regex

object Test {
   def main(args: Array[String]) {
      val pattern = "Scala".r
      val str = "Scala is Scalable and cool"
      
      println(pattern findFirstIn str)
   }
}

Aplicación del código anterior, la salida es:

$ scalac Test.scala 
$ scala Test
Some(Scala)

Ejemplos de uso del método de la clase String R () para construir un objeto de expresión regular.

A continuación, utilice findFirstIn manera de encontrar el primer partido.

Si necesita ver todos los partidos se pueden utilizar métodos findAllIn.

Puede utilizar el método mkString () para conectar una expresión regular coincide con la cadena, y se puede usar la barra vertical (|) para establecer diferentes modos:

import scala.util.matching.Regex

object Test {
   def main(args: Array[String]) {
      val pattern = new Regex("(S|s)cala")  // 首字母可以是大写 S 或小写 s
      val str = "Scala is scalable and cool"
      
      println((pattern findAllIn str).mkString(","))   // 使用逗号 , 连接返回结果
   }
}

Aplicación del código anterior, la salida es:

$ scalac Test.scala 
$ scala Test
Scala,scala

Si necesita reemplazar el texto que coinciden con las palabras clave especificadas, se puede utilizar el métodoreplaceFirstIn () para reemplazar el primer partido, utilice replaceAllIn ()método reemplaza todos los partidos, los ejemplos son los siguientes:

object Test {
   def main(args: Array[String]) {
      val pattern = "(S|s)cala".r
      val str = "Scala is scalable and cool"
      
      println(pattern replaceFirstIn(str, "Java"))
   }
}

Aplicación del código anterior, la salida es:

$ scalac Test.scala 
$ scala Test
Java is scalable and cool

Las expresiones regulares

reglas de sintaxis de expresiones regulares Scala heredados de Java, Java utilizará la mayor parte de las reglas del lenguaje Perl.

La siguiente tabla nos da algunas reglas de expresiones regulares comunes:

expresión regla de concordancia
^ Coincide comienza la cadena de entrada.
$ Coincidir con el extremo de entrada de la posición de la cadena.
. Coincide con cualquier carácter excepto "\ r \ n" es.
[...] juego de caracteres. Coincide con cualquier carácter incluido. Por ejemplo, "[abc]" coincide con "formato" en la "a".
[^ ...] juego de caracteres inversa. Coincide con cualquier carácter no incluido. Por ejemplo, "[^ abc]" coincide "normal" en el "p", "L", "i", "n".
Un \\ Coincida con la posición de inicio de la cadena de entrada (sin el apoyo de varias líneas)
\\ Z Final de la cadena ($ similar, pero no afectará a las opciones de tratamiento para varias filas)
\\ Z Final de la cadena o al final de la línea (de tratamiento sobre las opciones de línea múltiple)
re * Repetidas cero o más veces
re + Repetidas una o más veces
re? Repetidas cero o una vez
re {n} n veces repetidas
re {n,}
re {n, m} Repetida n a m veces
a | b Un partido ob
(Re) re partido, y capturar el texto al grupo de auto-nombrado
(?: Re) Partido re, no captan el texto coincidente, ni a este número de grupo de grupo asignado
(?> Re) subexpresiones codiciosos
\\ W las letras o los números o caracteres de subrayado o
\\ W No se han encontrado letras, números, guiones, caracteres chinos
\\ S Coincide con cualquier espacio en blanco, equivalente a [\ t \ n \ r \ f]
\\ S No encontró ningún espacio en blanco
\\ D números que coinciden, similar a [0-9]
\\ D Coincide con cualquier carácter no numérico
\\ G El comienzo de la búsqueda actual
\\ N salto de línea
\\ B Por lo general, una posición límite de la palabra, pero si se utiliza un carácter de clase representa la tecla de retroceso
\\ B La ubicación no coincide con el comienzo o al final de una palabra
\\ T fichas
\\ Q Iniciocita: \ Q (a + b) * 3 \ E coincide con el texto "(a + b) * 3 ".
\\ E Fin de lacita: \ Q (a + b) * 3 \ E coincide con el texto "(a + b) * 3 ".

Ejemplos de expresiones regulares

Ejemplos descripción
. Coincide con cualquier carácter excepto "\ r \ n" es.
[Rr] uby Partido "Ruby" o "ruby"
frotación [os] Partido "ruby" o "Rube"
[Aeiou] Coincidir con letras minúsculas: aeiou
[0-9] Coincide con cualquier dígito, similar a [0123456789]
[AZ] Equivale a cualquier letras minúsculas ASCII
[AZ] Coincide con cualquier mayúscula ASCII
[A-Za-Z0-9] números que coinciden, letras mayúsculas y minúsculas
[^ Aeiou] Además de la búsqueda de otros personajes aeiou
[^ 0-9] Coincide con cualquier carácter distinto de los números
\\ D números que coinciden, como esto: [0-9]
\\ D los números no coinciden, como esto: [^ 0-9]
\\ S espacios de los partidos, similar a: [\ t \ r \ n \ f]
\\ S Coincidencia de no-espacio, similar a: [^ \ t \ r \ n \ f]
\\ W aparear letras, números, guiones bajos, similares a: [A-Za-z0-9_]
\\ W cartas no coincidentes, números, guiones bajos, similares a: [^ A-Za-z0-9_]
rubí? Match "roce" o "ruby": y es opcional
rubí * Match "roce" más cero o más de y.
rubí + Match "roce", además de uno o más de y.
\\ D {3} Coincide exactamente con tres números.
\\ D {3,} Coincidir tres o más dígitos.
\\ D {3,5} Coinciden con tres, cuatro o cinco números.
\\ \\ D + d Sin Agrupamiento: + repitiendo \ d
(D \\ \\ d) + / Grupo: + repitiendo \ D \ d para
([Rr] uby (,)?) + Match "Ruby", "Ruby, rubí, rubí", etc.

Tenga en cuenta que la tabla anterior para cada personaje utiliza dos barra invertida. Esto se debe a que en Java y Scala barra invertida en la cadena es el carácter de escape. Así que si desea la salida. \., Usted tiene que escribir en la cadena. \\. Para obtener una barra invertida. Véanse los siguientes ejemplos:

import scala.util.matching.Regex

object Test {
   def main(args: Array[String]) {
      val pattern = new Regex("abl[ae]\\d+")
      val str = "ablaw is able1 and cool"
      
      println((pattern findAllIn str).mkString(","))
   }
}

Aplicación del código anterior, la salida es:

$ scalac Test.scala 
$ scala Test
able1