正規表現の括弧は、match/case ステートメントでは機能しないようです。たとえば、次のコード
val pat1 = """ab""".r
val pat2 = """(a)(b)""".r
val pat3 = """((a)(b))""".r
val pat4 = """((a)b)""".r
val pat5 = """(ab)""".r
"ab" match {
case pat1(x) => println("1 " + x)
case pat2(x) => println("2 " + x)
case pat3(x) => println("3 " + x)
case pat4(x) => println("4 " + x)
case pat5(x) => println("5 " + x)
case _ => println("None of the above")
}
「5 ab」と表示されますが、どのパターンも一致すると予想していました。「(...)?」を使いたい オプションの要素ですが、できません。これに関連して、(?m) が機能しません。私のパターンは、マッチ/ケース式の外でも問題なく動作します。Scala が match/case 式で正規表現をどのように処理するかを誰かに説明してもらえますか?
Scala でトークナイザーを作成しようとしています。