Scala Language
Wyrażenia regularne
Szukaj…
Składnia
- re.findAllIn (s: CharSequence): MatchIterator
- re.findAllMatchIn (s: CharSequence): Iterator [Dopasuj]
- re.findFirstIn (s: CharSequence): Option [String]
- re.findFirstMatchIn (s: CharSequence): Opcja [Dopasuj]
- re.findPrefixMatchIn (s: CharSequence): Opcja [Dopasuj]
- re.findPrefixOf (s: CharSequence): Option [String]
- re.replaceAllIn (s: CharSequence, replaceer: Match => String): String
- re.replaceAllIn (s: CharSequence, replace: String): String
- re.replaceFirstIn (s: CharSequence, replace: String): String
- re.replaceSomeIn (s: CharSequence, replaceer: Match => Option [String]): String
- re.split (s: CharSequence): Array [String]
Deklarowanie wyrażeń regularnych
Metoda r
niejawnie podana za pośrednictwem scala.collection.immutable.StringOps tworzy instancję scala.util.matching.Regex z ciągu podmiotu. Przydaje się tutaj potrójna składnia napisów Scali, ponieważ nie musisz uciekać przed odwrotnymi ukośnikami, tak jak w Javie:
val r0: Regex = """(\d{4})-(\d${2})-(\d{2})""".r // :)
val r1: Regex = "(\\d{4})-(\\d{2})-(\\d{2})".r // :(
scala.util.matching.Regex implementuje interfejs API idiomatycznego wyrażenia regularnego dla Scali jako opakowania nad java.util.regex.Pattern , a obsługiwana składnia jest taka sama. To powiedziawszy, wsparcie Scali dla wieloliniowych literałów łańcuchowych sprawia, że flaga x
znacznie bardziej użyteczna, umożliwiając komentarze i ignorując białe znaki wzoru:
val dateRegex = """(?x:
(\d{4}) # year
-(\d{2}) # month
-(\d{2}) # day
)""".r
Istnieje przeciążona wersja r
, def r(names: String*): Regex
która pozwala przypisywać nazwy grup do przechwytywanych wzorów. Jest to nieco kruche, ponieważ nazwy są oddzielone od przechwytywania i powinny być używane tylko wtedy, gdy wyrażenie regularne będzie używane w wielu lokalizacjach:
"""(\d{4})-(\d{2})-(\d{2})""".r("y", "m", "d").findFirstMatchIn(str) match {
case Some(matched) =>
val y = matched.group("y").toInt
val m = matched.group("m").toInt
val d = matched.group("d").toInt
java.time.LocalDate.of(y, m, d)
case None => ???
}
Powtarzanie dopasowania wzorca w ciągu
val re = """\((.*?)\)""".r
val str = "(The)(example)(of)(repeating)(pattern)(in)(a)(single)(string)(I)(had)(some)(trouble)(with)(once)"
re.findAllMatchIn(str).map(_.group(1)).toList
res2: List[String] = List(The, example, of, repeating, pattern, in, a, single, string, I, had, some, trouble, with, once)