Regular Expressions in Scala

Our example demonstrates common regular expression tasks in Scala.

import scala.util.matching.Regex

object RegularExpressions {
  def main(args: Array[String]): Unit = {
    // This tests whether a pattern matches a string.
    val patternMatch = "p([a-z]+)ch".r.matches("peach")
    println(patternMatch)

    // For other regex tasks, we'll use a compiled Regex object.
    val r = "p([a-z]+)ch".r

    // Here's a match test like we saw earlier.
    println(r.matches("peach"))

    // This finds the match for the regex.
    println(r.findFirstIn("peach punch"))

    // This finds the first match but returns the start and end indexes 
    // for the match instead of the matching text.
    r.findFirstMatchIn("peach punch").foreach { m =>
      println(s"idx: ${m.start} ${m.end}")
    }

    // The `Submatch` variants include information about
    // both the whole-pattern matches and the submatches
    // within those matches.
    r.findFirstMatchIn("peach punch").foreach { m =>
      println(s"${m.group(0)} ${m.group(1)}")
    }

    // The `findAllIn` method applies to all matches in the input, 
    // not just the first.
    println(r.findAllIn("peach punch pinch").toList)

    // Providing a limit to these functions will restrict 
    // the number of matches.
    println(r.findAllIn("peach punch pinch").take(2).toList)

    // The `replaceFirstIn` method can be used to replace 
    // subsets of strings with other values.
    println(r.replaceFirstIn("a peach", "<fruit>"))

    // The `replaceAllIn` method with a function allows you to 
    // transform matched text with a given function.
    val result = r.replaceAllIn("a peach", m => m.group(0).toUpperCase())
    println(result)
  }
}

To run the program, save it as RegularExpressions.scala and use scala:

$ scala RegularExpressions.scala
true
true
Some(peach)
idx: 0 5
peach ea
List(peach, punch, pinch)
List(peach, punch)
a <fruit>
a PEACH

Scala’s regular expression support is provided by the scala.util.matching.Regex class. It offers similar functionality to Go’s regexp package, but with a more functional and Scala-idiomatic API.

For a complete reference on Scala regular expressions, check the Scala documentation for the Regex class.