2011年9月13日火曜日

Scalaで正規表現を使ったパターンマッチ

正規表現を使ったパターンマッチの例
    def patternMatch(args:String) {
      // 正規表現を定義する
      val pattern1 = "([0-9]+)".r
      val pattern2 = "([a-zA-Z]+)".r
      args match {
        // caseで定義した正規表現を指定する。
        // 前方参照可能なグループがある場合には、そのグループを代入する定数を指定する。
        case pattern1(n) => println("number = " + n)
        case pattern2(s) => println("string = " + s)
        case s:String => println("other = " + s)
      }
    }
    patternMatch("100")             // -> number = 100
    patternMatch("abc")             // -> string = abc
    patternMatch("abc100")        // -> other = abc100
こんな感じにいけるんかと思ってたけどコンパイルエラーで悩まされた・・・
      args match {
        case "([0-9])+".r => println("number")
        case "([a-zA-Z)+".r => println("string")
        case s: String => println("other = " + s)
      }