Sök…


Syntax

  • re.findAllIn (s: CharSequence): MatchIterator
  • re.findAllMatchIn (s: CharSequence): Iterator [Match]
  • re.findFirstIn (s: CharSequence): Alternativ [String]
  • re.findFirstMatchIn (s: CharSequence): Alternativ [Matcha]
  • re.findPrefixMatchIn (s: CharSequence): Alternativ [Matcha]
  • re.findPrefixOf (s: CharSequence): Alternativ [String]
  • re.replaceAllIn (s: CharSequence, ersättare: Match => String): String
  • re.replaceAllIn (s: CharSequence, ersättning: String): String
  • re.replaceFirstIn (s: CharSequence, ersättning: String): String
  • re.replaceSomeIn (s: CharSequence, ersättare: Match => Alternativ [String]): String
  • re.split (s: CharSequence): Array [String]

Förklara regelbundna uttryck

Metoden r tillhandahålls implicit via scala.collection.immutable.StringOps producerar en instans av scala.util.matching.Regex från ämnessträngen . Skalas tredubblerade citerade strängsyntax är användbar här, eftersom du inte behöver undgå backstänk som du skulle göra i 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 implementerar ett idiomatiskt API för reguljärt uttryck för Scala som en omslag över java.util.regex.Pattern , och den stödda syntaxen är densamma. Med det sagt säger Skalas stöd för flerstrengade bokstäver x flaggan väsentligen mer användbar, vilket möjliggör kommentarer och ignorerar mönstervitrum:

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

Det finns en överbelastad version av r , def r(names: String*): Regex som låter dig tilldela gruppnamn till dina mönsterupptagningar. Detta är något sprött eftersom namnen tas bort från tagningarna och bör endast användas om det reguljära uttrycket kommer att användas på flera platser:

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

Upprepa matchning av ett mönster i en sträng

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow