English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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
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:
Ausdruck | Regel 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". |
\\A | Passt den Anfang der Eingabezeichenkette (keine Unterstützung für mehrzeilige Optionen) |
\\z | Zeichenende (ähnlich $, aber unabhängig von der Option für mehrzeilige Verarbeitung) |
\\Z | Zeichenende 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 Mal | Wiederhole n Mal |
re{ n,} | Wiederhole n Mal oder mehr |
re{ n, m} | Wiederhole n bis m Mal |
a|b | Passt 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 |
w | Passt Buchstaben oder Ziffern oder Unterstriche oder Chinesische Zeichen |
\\W} | Passt jeden nicht-buchstäblichen, nicht-numerischen, nicht-Unterstrichen, nicht-chinesischen Zeichen |
s | Passt jeden Leerzeichen, entspricht [\t\n\r\f] |
S | Passt jeden nicht-leeren Zeichen |
d | Passt numerische Zeichen, ähnlich [0-9] |
D | Passt jeden nicht-numerischen Zeichen |
\\G | Anfang der aktuellen Suche |
\\n | Zeilenumbruch |
\\b | Normalerweise ein Worttrennzeichen, aber wenn es im Zeichensatz verwendet wird, stellt es den Rückgabetaste dar |
\\B | Passt nicht an den Anfang oder das Ende eines Wortes |
\\t | Tabulator |
\\Q | Anfang des Anführungszeichens:\Q(a+b)*3\E Passt den Text "(a+b)*3"。 |
\\E | Ende des Anführungszeichens:\Q(a+b)*3\E Passt den Text "(a+b)*3"。 |
Beispiel | Beschreibung |
---|---|
. | Passen Sie jeden einzelnen Zeichen außer \r\n |
[Rr]uby | Passen 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 |
d | Passen Sie numerische Zeichen, ähnlich: [0-9] |
D | Passen Sie nicht numerische Zeichen, ähnlich: [^0-9] |
s | Passen Sie Leerzeichen, ähnlich: [ \t\r\n\f] |
S | Passen Sie nicht leere Leerzeichen, ähnlich: [^ \t\r\n\f] |
w | Passen 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