正規表現(Regex)によるパターンマッチング

Scalaの強力な構文のひとつ、 match〜caseによるパターンマッチングですが、正規表現にも使うことができます。

scala> val a = """Regexp here, (\w+) and (\w+)""".r
a: scala.util.matching.Regex = Regexp here, (\w+) and (\w+)
 
scala> "Regexp here, hoge and fuga" match {
     | case a(c,d) => c+d
     | }
res0: java.lang.String = hogefuga

上記のgistぺたりは http://gist.github.com/187119

case句にRegexインスタンスを渡して(..)内にグルーピングごとのマッチ結果を代入する変数名などを入れます。ところで

  case ("hoge".r)(m) =>

みたいな風にはかけないみたいです。case句の中で評価されるような式は書けないということで、正規表現のマッチングは事前に valなどを使って変数名だけで解決できるようにしておく必要があるようです。