Latest web development tutorials

Espressioni regolari Scala

Scala dascala.util.matching tipi di pacchetto classe Regex per supportare le espressioni regolari.L'esempio seguente dimostra l'uso di ricerca di espressioni regolari parolaScala:

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)
   }
}

L'attuazione del codice di cui sopra, l'output è:

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

Esempi di utilizzo del metodo della classe String R () per costruire un oggetto Regex.

Quindi utilizzare modo findFirstIn per trovare la prima corrispondenza.

Se avete bisogno di vedere tutte le partite possono essere utilizzati metodi findAllIn.

È possibile utilizzare il metodo mkString () per collegare una espressione regolare corrisponde alla stringa, ed è possibile utilizzare la pipe (|) per impostare diverse modalità:

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(","))   // 使用逗号 , 连接返回结果
   }
}

L'attuazione del codice di cui sopra, l'output è:

$ scalac Test.scala 
$ scala Test
Scala,scala

Se è necessario sostituire testo corrispondente parole chiave specificate, è possibile utilizzare il metodoreplaceFirstIn () per sostituire la prima partita, utilizzare replaceAllIn ()metodo sostituisce tutte le partite, gli esempi sono i seguenti:

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"))
   }
}

L'attuazione del codice di cui sopra, l'output è:

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

Espressioni regolari

Scala regole di sintassi delle espressioni regolari ereditato Java, Java userà la maggior parte delle regole del linguaggio Perl.

La tabella che segue ci dà alcune regole comuni espressioni regolari:

espressione regola di corrispondenza
^ Trova inizia la stringa di input.
$ Partita la fine di ingresso della posizione della stringa.
. Corrisponde a qualsiasi singolo carattere eccetto "\ r \ n" è.
[...] Set di caratteri. Corrisponde a qualsiasi carattere incluso. Ad esempio, "[abc]" corrisponde a "pianura" nella "a".
[^ ...] set di caratteri inverso. Corrisponde a qualsiasi carattere non incluso. Ad esempio, "[^ abc]" corrisponde a "pianura" nella "p", "l", "i", "n".
\\ A Abbinare la posizione di inizio stringa di input (nessun supporto multi-linea)
\\ Z Fine della stringa ($ simile, ma non influenza le opzioni di trattamento per più righe)
\\ Z Fine della stringa o alla fine della linea (dal trattamento sulle opzioni più riga)
re * Ripetute zero o più volte
re + Ripetute una o più volte
re? Ripetute zero o una volta
re {n} n volte ripetute
ri {n,}
re {n, m} Ripetuta n a m volte
A | B Una partita o B
(Re) Partita re, e catturare il testo di gruppo di auto-nome
(: Re) Partita re, non catturare il testo corrispondente, né di questo numero del gruppo gruppo assegnato
(?> Re) sottoespressioni Greedy
\\ W lettere Match o numeri, o caratteri di sottolineatura o
\\ W Non corrisponde a nessuno lettere, numeri, caratteri di sottolineatura caratteri cinesi
\\ S Corrisponde a qualsiasi spazio bianco, equivalente a [\ t \ n \ r \ f]
\\ S Non corrisponde alcun carattere di spazio
\\ D Monomatricola, simili a [0-9]
\\ D Corrisponde a tutti i caratteri non numerici
\\ G L'inizio della ricerca corrente
\\ N newline
\\ B Di solito una posizione di confine di parola, ma se si utilizza un carattere di classe rappresenta backspace
\\ B Posizione non corrisponde all'inizio o alla fine di una parola
\\ T Tabs
\\ Q Iniziocitazione: \ Q (a + b) * 3 \ E corrisponde testo "(a + b) * 3 ".
\\ E Citazione: \ Q (a + b) * 3 \ E corrisponde testo "(a + b) * 3 ".

Esempi di espressioni regolari

Esempi descrizione
. Corrisponde a qualsiasi singolo carattere eccetto "\ r \ n" è.
[Rr] Uby Match "Ruby" o "ruby"
strofinare [voi] Match "ruby" o "rube"
[Aeiou] Partita lettere minuscole: AEIOU
[0-9] Corrisponde a qualsiasi cifra, simile a [0123456789]
[AZ] Corrisponde a tutte le lettere minuscole ASCII
[AZ] Corrisponde a qualsiasi maiuscolo ASCII
[A-Za-Z0-9] numeri di corrispondenza, lettere maiuscole e minuscole
[^ Aeiou] Oltre alla corrispondenza altri personaggi aeiou
[^ 0-9] Corrisponde a qualsiasi carattere diverso da numeri
\\ D numeri di corrispondenza, in questo modo: [0-9]
\\ D i numeri non corrispondenti, come questo: [^ 0-9]
\\ S spazi Match, simile a: [\ t \ r \ n \ f]
\\ S Abbinamento non-spazio, simile a: [^ \ t \ r \ n \ f]
\\ W lettere Corrispondenza, numeri, caratteri di sottolineatura, simile a: [A-Za-z0-9_]
\\ W lettere non corrispondenti, numeri, caratteri di sottolineatura, simile a: [^ A-Za-z0-9_]
Ruby? Match "strofinare" o "ruby": y è facoltativo
ruby * Match "strofinare" più zero o più y.
rubino + Match "strofinare" più uno o più di y.
\\ D {3} Esattamente corrispondenti tre numeri.
\\ D {3,} Abbina tre o più cifre.
\\ D {3,5} Abbina tre, quattro o cinque numeri.
\\ D \\ d + Nessun raggruppamento: + ripetendo \ d
(\\ D \\ d) + / Gruppo: + ripetendo \ D \ D a
([Rr] Uby (,)?) + Match "Ruby", "Ruby, ruby, ruby", etc.

Si noti che la tabella di cui sopra per ogni personaggio utilizza due backslash. Questo perché in Java e Scala backslash nella stringa è il carattere di escape. Quindi, se si vuole in uscita. \., È necessario scrivere nella stringa. \\. Per ottenere un backslash. Vedere i seguenti esempi:

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(","))
   }
}

L'attuazione del codice di cui sopra, l'output è:

$ scalac Test.scala 
$ scala Test
able1