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

ScalaRegulärerAusdruck

Scala verwendet das scala.util.matching-Paket, um Regex Klasse zur Unterstützung regulärer Ausdrücke. Der folgende Beispiel zeigt, wie man mit regulären Ausdrücken Wörter findet Scala :

import scala.util.matching.Regex
object Test {
   def main(args: Array[String]) {
      val pattern = "Scala".r
      val str = "Scala ist Scalable und cool"
      
      println(pattern findFirstIn str)
   }
}

Führen Sie den folgenden Code aus, um das Ergebnis anzuzeigen:

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

Im Beispiel wurde ein Regex-Objekt durch das r()-Verfahren der String-Klasse erstellt.

Dann verwenden Sie das findFirstIn-Verfahren, um die erste Übereinstimmung zu finden.

Wenn Sie alle Übereinstimmungen anzeigen müssen, können Sie das findAllIn-Verfahren verwenden.

Verwenden Sie das mkString( )-Verfahren, um die Zeichenfolgen der regulären Ausdrucksübereinstimmungen zu verbinden, und verwenden Sie das PIPE |-Zeichen, um verschiedene Muster zu setzen:

import scala.util.matching.Regex
object Test {
   def main(args: Array[String]) {
      val pattern = new Regex("(S|s)cala")  // Der erste Buchstabe kann groß S oder klein s sein
      val str = "Scala ist skalierbar und cool"
      
      println((pattern findAllIn str).mkString(","))   // Verwenden Sie Komma , um die Ergebnisse zu verbinden
   }
}

Führen Sie den folgenden Code aus, um das Ergebnis anzuzeigen:

$ scalac Test.scala 
$ scala Test
Scala,scala

Wenn Sie den zugesprochenen Text durch einen bestimmten Schlüsselwort ersetzen müssen, können Sie replaceFirstIn( ) Methode, um die erste Übereinstimmung zu ersetzen, verwenden replaceAllIn( ) Methode ersetzt alle Übereinstimmungen, Beispiel:

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

Führen Sie den folgenden Code aus, um das Ergebnis anzuzeigen:

$ scalac Test.scala 
$ scala Test
Java ist skalierbar und cool

Regulärer Ausdruck

Die regulären Ausdrücke in Scala erben die Syntaxregeln von Java, und Java verwendet die meisten Regeln der Sprache Perl.

In der folgenden Tabelle haben wir einige gebräuchliche Regeln für reguläre Ausdrücke aufgeführt:

AusdruckRegel der Regel
^ Passen Sie die Position am Anfang des Eingabezeils an.
$Passen Sie die Position am Ende des Eingabezeils an.
.Passen Sie jeden einzelnen Zeichen außer \r\n
[...]Zeichensatz. Passt jeden enthaltenen Zeichen. Zum Beispiel, "[abc]" passt "plain" im "a".
[^...]Umgekehrte Zeichensatz. Passt jeden nicht enthaltenden Zeichen. Zum Beispiel, "[^abc]" passt "plain" in "p", "l", "i", "n".
\\APasst den Anfang der Eingabezeichenkette (keine Unterstützung für mehrzeilige Optionen)
\\zZeichenende (ähnlich $, aber unabhängig von der Option für mehrzeilige Verarbeitung)
\\ZZeichenende oder Zeilenende (unabhängig von der Option für mehrzeilige Verarbeitung)
re*Wiederhole null Mal oder mehr
re+Wiederhole einmal oder mehr
re?Wiederhole null Mal oder einmal
Wiederhole n MalWiederhole n Mal
re{ n,}Wiederhole n Mal oder mehr
re{ n, m}Wiederhole n bis m Mal
a|bPasst a oder b
(re)Passt re und erfasst den Text in einem automatisch benannten Gruppe
(?: re)Passt re, ohne die passenden Texte zu erfassen, und keine Gruppennummer für diese Gruppe zu zuweisen
(?> re)Gieriger Ausdrucksverweis
wPasst Buchstaben oder Ziffern oder Unterstriche oder Chinesische Zeichen
\\W}Passt jeden nicht-buchstäblichen, nicht-numerischen, nicht-Unterstrichen, nicht-chinesischen Zeichen
sPasst jeden Leerzeichen, entspricht [\t\n\r\f]
SPasst jeden nicht-leeren Zeichen
dPasst numerische Zeichen, ähnlich [0-9]
DPasst jeden nicht-numerischen Zeichen
\\GAnfang der aktuellen Suche
\\nZeilenumbruch
\\bNormalerweise ein Worttrennzeichen, aber wenn es im Zeichensatz verwendet wird, stellt es den Rückgabetaste dar
\\BPasst nicht an den Anfang oder das Ende eines Wortes
\\tTabulator
\\QAnfang des Anführungszeichens:\Q(a+b)*3\E Passt den Text "(a+b)*3"。
\\EEnde des Anführungszeichens:\Q(a+b)*3\E Passt den Text "(a+b)*3"。

Beispiel für reguläre Ausdrücke

BeispielBeschreibung
.Passen Sie jeden einzelnen Zeichen außer \r\n
[Rr]ubyPassen Sie "Ruby" oder "ruby"
rub[ye]Passen Sie "ruby" oder "rube"
[aeiou]Passen Sie Kleinbuchstaben :aeiou
[0-9]Passen Sie alle Ziffern, ähnlich [0123456789]
[a-z]Passen Sie alle ASCII-Kleinbuchstaben
[A-Z]Passen Sie alle ASCII-Großbuchstaben
[a-zA-Z0-9]Passen Sie numerische Zeichen und Großbuchstaben
[^aeiou]Passen Sie alle anderen Zeichen außer aeiou
[^0-9]Passen Sie alle anderen Zeichen außer Ziffern
dPassen Sie numerische Zeichen, ähnlich: [0-9]
DPassen Sie nicht numerische Zeichen, ähnlich: [^0-9]
sPassen Sie Leerzeichen, ähnlich: [ \t\r\n\f]
SPassen Sie nicht leere Leerzeichen, ähnlich: [^ \t\r\n\f]
wPassen Sie Buchstaben, Ziffern, Unterstriche, ähnlich: [A-Za-z0-9_]
\\W}Passen Sie nicht-alphabetische, numerische, Unterstriche und ähnliche: [^A-Za-z0-9_]
ruby?Passen Sie "rub" oder "ruby": y ist optional
ruby*Passen Sie "rub" zusammen mit 0 oder mehreren der y.
ruby+Passen Sie "rub" zusammen mit 1 oder mehrere der y.
\\d{3}Genau passen 3 Zahlen.
\\d{3,}Passen Sie 3 oder mehrere Zahlen.
\\d{3,5}Passen Sie 3 oder4 oder 5 Zahlen.
\\D\\d+Keine Gruppierung: + Wiederholen Sie \d
(\\D\\d)+/Gruppierung: + Wiederholen Sie \D\d Paare
([Rr]uby(, )?)+Passen Sie "Ruby"、"Ruby, ruby, ruby" und so weiter an

Beachten Sie, dass jeder Zeichen im obigen Tisch mit zwei Backslashes verwendet wird. Dies liegt daran, dass der Backslash im String in Java und Scala ein Escape-Zeichen ist. Daher müssen Sie \ verwenden, um \ zu output zu erhalten. Sehen Sie sich das folgende Beispiel an:

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

Führen Sie den folgenden Code aus, um das Ergebnis anzuzeigen:

$ scalac Test.scala 
$ scala Test
able1