正規表現と文字列の一致が頻繁に起こります。 Javaでは:Scalaの正規表現との照合
java.util.regex.Pattern.compile( "\ wの+")マッチャ( "this_is")
痛いと一致します。。。 Scalaには多くの選択肢があります。
"\\w+".r.pattern.matcher("this_is").matches
"this_is".matches("\\w+")
"\\w+".r unapplySeq "this_is" isDefined
val R = "\\w+".r; "this_is" match { case R() => true; case _ => false}
最初は、Javaコードと同じくらい重い重量です。
2番目の問題は、コンパイル済みのパターン("this_is".matches("\\w+".r")
)を指定できないことです。 (正規表現を取るメソッドがあるたびに正規表現をとるオーバーロードがあるので、これはアンチパターンと思われます)。
第3の問題は、それが乱用unapplySeq
であり、ひどいことです。
正規表現の一部を分解するときに4番目の値は大きいですが、ブール値の結果のみを必要とする場合は重すぎることになります。
正規表現との一致を確認する簡単な方法がありませんか? String#matches(regex: Regex): Boolean
が定義されていない理由はありますか?実際、String#matches(uncompiled: String): Boolean
はどこに定義されていますか?それが一致するか、他None
場合
scala> val Email = """(\w+)@([\w\.]+)""".r
findFirstIn
がSome[String]
を返します。
'String#matches(string:String)'は、2.9仕様または[StringLike](http://www.scala-lang.org/api/current/index.html)で定義されていないことに注意してください。 #scala.collection.immutable.StringLike)型を標準ライブラリから削除します。実際、Javaの[Strings]の定義のアーティファクトです(http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#matches(java.lang))。文字列))。 – ig0774
最初の例で重すぎるとはどういう意味ですか?コードが長すぎるか、あまりにも多くの作業をしているという意味ですか? –
あまりにも多くのコード、仕事は私が欲しいものです – schmmd