Scala Language
Normale uitdrukkingen
Zoeken…
Syntaxis
- re.findAllIn (s: CharSequence): MatchIterator
- re.findAllMatchIn (s: CharSequence): Iterator [Match]
- re.findFirstIn (s: CharSequence): Option [String]
- re.findFirstMatchIn (s: CharSequence): Optie [Match]
- re.findPrefixMatchIn (s: CharSequence): Optie [Match]
- re.findPrefixOf (s: CharSequence): Option [String]
- re.replaceAllIn (s: CharSequence, vervanger: Match => String): String
- re.replaceAllIn (s: CharSequence, replacement: String): String
- re.replaceFirstIn (s: CharSequence, replacement: String): String
- re.replaceSomeIn (s: CharSequence, vervanger: Match => Optie [String]): String
- re.split (s: CharSequence): Array [String]
Reguliere uitdrukkingen declareren
De methode r
wordt impliciet aangeboden via scala.collection.immutable.StringOps produceert een instantie van scala.util.matching.Regex uit de onderwerpreeks. Scala's drievoudige aanhalingstekensyntaxis is hier handig, omdat je niet hoeft te ontsnappen aan backslashes zoals je zou doen in 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 implementeert een idiomatische reguliere expressie-API voor Scala als een wrapper over java.util.regex.Pattern , en de ondersteunde syntaxis is hetzelfde. Dat gezegd hebbende, Scala's ondersteuning voor multi-line stringliterals maakt de x
vlag aanzienlijk nuttiger, waardoor opmerkingen mogelijk zijn en de witruimte van het patroon wordt genegeerd:
val dateRegex = """(?x:
(\d{4}) # year
-(\d{2}) # month
-(\d{2}) # day
)""".r
Er is een overbelaste versie van r
, def r(names: String*): Regex
waarmee u groepsnamen kunt toewijzen aan uw patroonvastleggingen. Dit is enigszins bros, omdat de namen zijn losgekoppeld van de vastleggingen en alleen mogen worden gebruikt als de reguliere expressie op meerdere locaties wordt gebruikt:
"""(\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 => ???
}
Herhaald matchen van een patroon in een string
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)