Поиск…


Синтаксис

  • re.findAllIn (s: CharSequence): MatchIterator
  • re.findAllMatchIn (s: CharSequence): Итератор [Матч]
  • re.findFirstIn (s: CharSequence): Option [String]
  • re.findFirstMatchIn (s: CharSequence): Option [Match]
  • re.findPrefixMatchIn (s: CharSequence): Option [Match]
  • re.findPrefixOf (s: CharSequence): Option [String]
  • re.replaceAllIn (s: CharSequence, replacer: Match => String): String
  • re.replaceAllIn (s: CharSequence, replacement: String): String
  • re.replaceFirstIn (s: CharSequence, replacement: String): String
  • re.replaceSomeIn (s: CharSequence, replacer: Match => Option [String]): String
  • re.split (s: CharSequence): Array [String]

Объявление регулярных выражений

Метод r неявно предоставляется через scala.collection.immutable.StringOps создает экземпляр scala.util.matching.Regex из строки темы. Синтаксис синтаксиса Scala с тремя кавычками полезен здесь, так как вам не нужно скрывать обратную косую черту, как в Java:

val r0: Regex = """(\d{4})-(\d${2})-(\d{2})""".r     // :)
val r1: Regex = "(\\d{4})-(\\d{2})-(\\d{2})".r // :(

scala.util.matching.Regex реализует идиоматическое регулярное выражение API для Scala как обертки над java.util.regex.Pattern , а поддерживаемый синтаксис тот же. При этом поддержка Scala для многострочных строковых литералов делает флаг x существенно более полезным, позволяя комментировать и игнорируя пробел шаблона:

val dateRegex = """(?x:
   (\d{4}) # year
  -(\d{2}) # month
  -(\d{2}) # day
)""".r

Существует перегруженная версия r , def r(names: String*): Regex которая позволяет вам назначать имена групп для захвата вашего шаблона. Это несколько хрупко, поскольку имена отделяются от захватов и должны использоваться только в том случае, если регулярное выражение будет использоваться в нескольких местах:

"""(\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 => ???
}

Повторное сопоставление шаблона в строке

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)


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow