ちょっと困っています。(私は正規表現のプロですが、scala/Java ではあまり使用しません)。長さが 11 文字の数値文字列があり、最後の 10 文字だけが必要なので、次のようにします。
val Pattern = """(\d{10})$""".r
"79283767219" match {
case Pattern(m) => m
}
が得られますMatchError
が、なぜですか?! 私は何を誤解しましたか?
正規表現パターンと照合する場合、正規表現パターンは文字列全体と一致する必要があります。つまり、正規表現パターンが で始まり で^
終わるようなもの$
です。この背後にある理由は、 amatch
が右側の左側全体を分解することになっているためです。
Scala 2.10 では、次のように呼び出しunanchored
て、部分一致を行うマッチャーを取得できます。
val Pattern = """(\d{10})$""".r.unanchored
アンカーは保持されますのでご安心ください。ドロップされる文字列全体に一致が適用されることを期待しているだけです。
10桁ではなく11桁なので、 で「10桁以上」を設定できます{10,}
。文字列の末尾のみに一致させるには、完全なパターンを明示的に指定する必要があります。
val Pattern = """.*(\d{10})$""".r
更新: Scala 2.10 を使用して Daniel を使用できるようになるまでは、次のunanchored
ように回避できます。
Pattern.findFirstIn("79283767219")
RegEx
あなたの例のようなインスタンスがコンストラクトでPattern
使用されている場合、それは検索ではなく、一致であることに注意してください!一致する値全体と一致する必要があることを意味します(Scalaの用語では、「scrutinee」(例では<code> 79283767219)と呼ばれます)。match
それはあなたの例がを取得した理由を説明していますMatchError
。