1. ホーム
  2. regex

[解決済み] Scalaで文字列が正規表現に完全にマッチするかどうかを確認するには?

2023-05-30 21:42:17

質問

多くの文字列をマッチさせたい正規表現パターンがあるとします。

val Digit = """\d""".r

私は与えられた文字列が完全に正規表現にマッチするかどうかをチェックしたいだけです。Scalaでこれを行うための良い、慣用的な方法は何ですか?

私はRegexesのパターンマッチができることを知っていますが、この場合、抽出するグループがないので、構文的にあまり喜ばしくありません。

scala> "5" match { case Digit() => true case _ => false }
res4: Boolean = true

あるいは、根本的なJavaパターンにフォールバックすることもできます。

scala> Digit.pattern.matcher("5").matches
res6: Boolean = true

というのもエレガントではありません。

もっと良い解決策はないのでしょうか?

どのように解決するのですか?

自分自身の質問に答えるために、私はquot;pimp my libraryパターン"を使用します。

object RegexUtils {
  implicit class RichRegex(val underlying: Regex) extends AnyVal {
    def matches(s: String) = underlying.pattern.matcher(s).matches
  }
}

というように使用します。

import RegexUtils._
val Digit = """\d""".r
if (Digit matches "5") println("match")
else println("no match")

誰かがより良い(標準的な)解決策を考え出さない限り。

注意事項

  • ポン引きじゃない String を使用して、潜在的な副作用の範囲を限定しています。

  • unapplySeq はその文脈ではあまりうまく読めません。