Scala Reguläre Ausdrücke
Scala unterstützt reguläre Ausdrücke über dieRegexRegex-Klasse des Pakets scala.util.matching. Das folgende Beispiel zeigt, wie man mit regulären Ausdrücken Wörter findet.Scala :
Beispiel
object Test {
def main(args: Array[String]) {
val pattern = "Scala".r
val str = "Scala is Scalable and cool"
println(pattern findFirstIn str)
}
}
Führen Sie den obigen Code aus, das Ausgabeergebnis ist:
$ scalac Test.scala $ scala Test Some(Scala)
Im Beispiel wird die Methode r() der String-Klasse verwendet, um ein Regex-Objekt zu konstruieren.
Verwenden Sie dann die Methode findFirstIn, um die erste Übereinstimmung zu finden.
Wenn Sie alle Übereinstimmungen anzeigen möchten, können Sie die Methode findAllIn verwenden.
Sie können die Methode mkString() verwenden, um die Zeichenfolgen der Regex-Übereinstimmungsergebnisse zu verketten, und können die Pipe (|) verwenden, um verschiedene Muster festzulegen:
Beispiel
object Test {
def main(args: Array[String]) {
val pattern = new Regex("(S|s)cala") // Der erste Buchstabe kann ein großes S oder ein kleines s sein
val str = "Scala is scalable and cool"
println((pattern findAllIn str).mkString(",")) // Verwenden Sie ein Komma , um zurückgegebene Ergebnisse zu verketten
}
}
Führen Sie den obigen Code aus, das Ausgabeergebnis ist:
$ scalac Test.scala $ scala Test Scala,scala
Wenn Sie den übereinstimmenden Text durch ein angegebenes Schlüsselwort ersetzen möchten, können Sie diereplaceFirstIn( )-Methode verwenden, um die erste Übereinstimmung zu ersetzen; verwenden Sie diereplaceAllIn( )-Methode, um alle Übereinstimmungen zu ersetzen. Das Beispiel sieht wie folgt aus:
Beispiel
def main(args: Array[String]) {
val pattern = "(S|s)cala".r
val str = "Scala is scalable and cool"
println(pattern replaceFirstIn(str, "Java"))
}
}
Führen Sie den obigen Code aus, das Ausgabeergebnis ist:
$ scalac Test.scala $ scala Test Java is scalable and cool
Reguläre Ausdrücke
Scalas reguläre Ausdrücke erben die Syntaxregeln von Java, während Java größtenteils die Regeln der Sprache Perl verwendet.
Die folgende Tabelle enthält einige häufig verwendete Regeln für reguläre Ausdrücke:
| Ausdruck | Matcher-Regeln |
|---|---|
| ^ | Entspricht der Position am Anfang der Eingabezeichenfolge. |
| $ | Entspricht der Position am Ende der Eingabezeichenfolge. |
| . | Entspricht einem beliebigen einzelnen Zeichen außer "\r\n". |
| [...] | Zeichensatz. Entspricht einem beliebigen darin enthaltenen Zeichen. Zum Beispiel entspricht "[abc]" dem "a" in "plain". |
| [^...] | Negierter Zeichensatz. Entspricht jedem Zeichen, das nicht enthalten ist. Zum Beispiel entspricht "[^abc]" den Zeichen "p", "l", "i", "n" in "plain". |
| \\A | Entspricht der Startposition der Eingabezeichenfolge (ohne Mehrzeilenunterstützung) |
| \\z | Ende der Zeichenfolge (wie $, aber nicht von Optionen für die Mehrzeilenverarbeitung betroffen) |
| \\Z | Ende der Zeichenfolge oder Zeile (nicht von Optionen für die Mehrzeilenverarbeitung betroffen) |
| re* | Null oder mehr Wiederholungen |
| re+ | Eine oder mehr Wiederholungen |
| re? | Null oder eine Wiederholung |
| re{ n} | Genau n-mal wiederholen |
| re{ n,} | |
| re{ n, m} | Zwischen n und m Mal wiederholen |
| a|b | a oder b entsprechen |
| (re) | Mit re übereinstimmen und den Text in einer automatisch benannten Gruppe erfassen |
| (?: re) | Mit re übereinstimmen, den übereinstimmenden Text nicht erfassen und dieser Gruppe keine Gruppennummer zuweisen |
| (?> re) | Gieriger Teilausdruck |
| \\w | Trifft auf Buchstaben, Ziffern oder Unterstriche zu |
| \\W | Trifft auf jedes Zeichen zu, das kein Buchstabe, keine Ziffer, kein Unterstrich und kein chinesisches Zeichen ist |
| \\s | Trifft auf jedes Whitespace-Zeichen zu, äquivalent zu [\t\n\r\f] |
| \\S | Trifft auf jedes Zeichen zu, das kein Whitespace-Zeichen ist |
| \\d | Trifft auf eine Ziffer zu, wie [0-9] |
| \\D | Entspricht jedem Zeichen, das keine Ziffer ist |
| \\G | Anfang der aktuellen Suche |
| \\n | Zeilenumbruchzeichen |
| \\b | Normalerweise eine Wortgrenzenposition, aber wenn sie in einer Zeichenklasse verwendet wird, repräsentiert sie Rücktaste |
| \\B | Entspricht einer Position, die weder der Anfang noch das Ende eines Wortes ist |
| \\t | Tabulatorzeichen |
| \\Q | Öffnendes Anführungszeichen:\Q(a+b)*3\EKann den Text "(a+b)*3" abgleichen. |
| \\E | Schließendes Anführungszeichen:\Q(a+b)*3\EKann den Text "(a+b)*3" abgleichen. |
Beispiele für reguläre Ausdrücke
| Beispiel | Beschreibung |
|---|---|
| . | Entspricht einem beliebigen einzelnen Zeichen außer "\r\n". |
| [Rr]uby | Entspricht "Ruby" oder "ruby" |
| rub[ye] | Entspricht "ruby" oder "rube" |
| [aeiou] | Entspricht Kleinbuchstaben: aeiou |
| [0-9] | Entspricht einer beliebigen Ziffer, wie |
| [a-z] | Entspricht einem beliebigen ASCII-Kleinbuchstaben |
| [A-Z] | Entspricht einem beliebigen ASCII-Großbuchstaben |
| [a-zA-Z0-9] | Entspricht Ziffern, Groß- und Kleinbuchstaben |
| [^aeiou] | Entspricht Zeichen außer aeiou |
| [^0-9] | Entspricht Zeichen, die keine Ziffern sind |
| \\d | Entspricht einer Ziffer, wie: [0-9] |
| \\D | Entspricht einem Nicht-Ziffer-Zeichen, wie: [^0-9] |
| \\s | Entspricht Leerraum, wie: [ \t\r\n\f] |
| \\S | Entspricht Nicht-Leerraum, wie: [^ \t\r\n\f] |
| \\w | Entspricht Buchstaben, Ziffern, Unterstrichen, wie: [A-Za-z0-9_] |
| \\W | Entspricht Zeichen, die keine Buchstaben, Ziffern oder Unterstriche sind, wie: [^A-Za-z0-9_] |
| ruby? | Entspricht "rub" oder "ruby": y ist optional |
| ruby* | Entspricht "rub", gefolgt von null oder mehr y's. |
| ruby+ | Entspricht "rub", gefolgt von einem oder mehreren y's. |
| \\d{3} | Entspricht genau 3 Ziffern. |
| \\d{3,} | Entspricht 3 oder mehr Ziffern. |
| \\d{3,5} | Entspricht 3, 4 oder 5 Ziffern. |
| \\D\\d+ | Keine Gruppe: + wiederholt \d |
| (\\D\\d)+/ | Gruppe: + wiederholt das \D\d-Paar |
| ([Rr]uby(, )?)+ | Trifft auf "Ruby", "Ruby, ruby, ruby" usw. zu |
Beachten Sie, dass jedes Zeichen in der obigen Tabelle zwei Backslashes verwendet. Das liegt daran, dass in Java und Scala der Backslash in Zeichenketten ein Escape-Zeichen ist. Wenn Sie also\ausgeben möchten, müssen Sie es in der Zeichenkette als\\schreiben, um einen Backslash zu erhalten. Siehe folgendes Beispiel:
Beispiel
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(","))
}
}
Führen Sie den obigen Code aus, das Ausgabeergebnis ist:
$ scalac Test.scala $ scala Test able1Weitere Erweiterungen