scala.util.matching

Members list

Type members

Classlikes

object Regex

This object defines inner classes that describe regex matches and helper objects.

This object defines inner classes that describe regex matches and helper objects.

Attributes

Companion
class
Source
Regex.scala
Supertypes
class Object
trait Matchable
class Any
Self type
Regex.type
class Regex extends Serializable

A regular expression is used to determine whether a string matches a pattern and, if it does, to extract or transform the parts that match.

A regular expression is used to determine whether a string matches a pattern and, if it does, to extract or transform the parts that match.

Usage

This class delegates to the java.util.regex package of the Java Platform. See the documentation for java.util.regex.Pattern for details about the regular expression syntax for pattern strings.

An instance of Regex represents a compiled regular expression pattern. Since compilation is expensive, frequently used Regexes should be constructed once, outside of loops and perhaps in a companion object.

The canonical way to create a Regex is by using the method r, provided implicitly for strings:

val date = raw"(\d{4})-(\d{2})-(\d{2})".r

Since escapes are not processed in multi-line string literals, using triple quotes avoids having to escape the backslash character, so that "\\d" can be written """\d""". The same result is achieved with certain interpolators, such as raw"\d".r or a custom interpolator r"\d" that also compiles the Regex.

Extraction

To extract the capturing groups when a Regex is matched, use it as an extractor in a pattern match:

"2004-01-20" match {
  case date(year, month, day) => s"$year was a good year for PLs."
}

To check only whether the Regex matches, ignoring any groups, use a sequence wildcard:

"2004-01-20" match {
  case date(_*) => "It's a date!"
}

That works because a Regex extractor produces a sequence of strings. Extracting only the year from a date could also be expressed with a sequence wildcard:

"2004-01-20" match {
  case date(year, _*) => s"$year was a good year for PLs."
}

In a pattern match, Regex normally matches the entire input. However, an unanchored Regex finds the pattern anywhere in the input.

val embeddedDate = date.unanchored
"Date: 2004-01-20 17:25:18 GMT (10 years, 28 weeks, 5 days, 17 hours and 51 minutes ago)" match {
  case embeddedDate("2004", "01", "20") => "A Scala is born."
}

Find Matches

To find or replace matches of the pattern, use the various find and replace methods. For each method, there is a version for working with matched strings and another for working with Match objects.

For example, pattern matching with an unanchored Regex, as in the previous example, can also be accomplished using findFirstMatchIn. The findFirst methods return an Option which is non-empty if a match is found, or None for no match:

val dates = "Important dates in history: 2004-01-20, 1958-09-05, 2010-10-06, 2011-07-15"
val firstDate = date.findFirstIn(dates).getOrElse("No date found.")
val firstYear = for (m  m.group(1))
val months      = (0 to 11).map { i => val c = Calendar.getInstance; c.set(2014, i, 1); f"$c%tb" }
val reformatted = date.replaceAllIn(dates, _ match { case date(y,m,d) => f"${months(m.toInt - 1)} $d, $y" })

Pattern matching the Match against the Regex that created it does not reapply the Regex. In the expression for reformatted, each date match is computed once. But it is possible to apply a Regex to a Match resulting from a different pattern:

val docSpree = """2011(?:-\d{2}){2}""".r
val docView  = date.replaceAllIn(dates, _ match {
  case docSpree() => "Historic doc spree!"
  case _          => "Something else happened"
})

Value parameters

groupNames

A mapping from names to indices in capture groups

pattern

The compiled pattern

Attributes

See also
Companion
object
Source
Regex.scala
Supertypes
trait Serializable
class Object
trait Matchable
class Any
Known subtypes
Self type
trait UnanchoredRegex extends Regex

A Regex that finds the first match when used in a pattern match.

A Regex that finds the first match when used in a pattern match.

Attributes

See also
Source
Regex.scala
Supertypes
class Regex
trait Serializable
class Object
trait Matchable
class Any