Scala ひと巡り : 正規表現パターン (Regular Expression Patterns)
右無視シーケンスパターン
右無視パターンは、Seq[A]のサブ型あるいは、(たとえば下記のような)反復する形式上のパラメータをもつケースクラスなどのデータ分解に役立つフィーチャーです。
Elem(prefix:String, label:String, attrs:MetaData, scp:NamespaceBinding, children:Node*)
これらの場合、Scala は、任意長のシーケンスを表すワイルドカード-星印 _ * を最右端にもつパターンを許しています。
次は、シーケンスの前部とマッチし、残りを変数 restへ束縛する、パターンマッチの例です。
object RegExpTest1 extends Application { def containsScala(x: String): Boolean = { val z: Seq[Char] = x z match { case Seq('s','c','a','l','a', rest @ _*) => println("rest is "+rest) true case Seq(_*) => false } } }
次に述べる理由により、前 Scala バージョンと違い、もう任意の正規表現は使用できません。
Scala から当面の間除かれた一般的な Regexp パターン
正当性の問題が見つかり、このフィーチャーは当面の間 Scala 言語から除かれています。もしユーザーコミュニティーからのリクエストがあれば、私たちはこれを改善した形で復活させるかもしれません。
私達の考えでは、正規表現パターンは私たちが見積もったほどには XML 処理に役立ちませんでした。現実の XML 処理アプリケーションでは、XPath ははるかに良い選択肢に思われます。変換処理あるいは正規表現パターンが、あまり使われずしかも取り除くことが難しい難解なパターンに対していくつかのバ グをもつということを見つけたとき、言語を単純化する時が来たと私達は判断しました。