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)


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow