2017-07-25 2 views
0

Scala 2.11のなんらかの理由で、アンカーされた正規表現パターンは、アンカーされていない正規表現パターンとして機能します。Scala Anchored Regexはunachoredとして動作します

scala> """something\.com""".r.anchored findFirstIn "app.something.com" 
res66: Option[String] = Some(something.com) 
scala> """^.something\.com$""".r.anchored findFirstIn "app.something.com" 
res65: Option[String] = None 

私は、最初の式が第二(手動で入力されたアンカー)のようなNoneとして評価するだろうと思ったが、それはしません。

ご協力いただければ幸いです。

答えて

0

findFirstInメソッドは正規表現を自動的にアンカーします。

あなたはサンプルコードも一致していることを見ることができAのみ:

例:あなたは"pattern".rのような正規表現を作成したら、
"""\w+""".r findFirstIn "A simple example." foreach println // prints "A"

ところで、それは、デフォルトで固定されているが、それはmatchブロック内の正規表現を使用する場合にのみ重要です。 FindAllInまたはFindFirstInの内部では、このタイプの固定は無視されます。あなたは正規表現を使用しようとしている場所がわからないのであれば

、常に^$(または\A\z)を追加し、正規表現は、文字列全体に一致することを確認するには、アンカー。

0

私が思うに、それは唯一の試合で動作するようになっている:

val reg = "o".r.anchored 
"foo" match { 
    case reg() => "Yes!" 
    case _ => "No!" 
} 

... "いいえ!" を返します。 これはあまり役に立ちません。とにかく"o".rがデフォルトで固定されているためです。あなたには、いくつかのunanchoredを作った場合、私は想像することができ、このの使用のみであり、それを元に戻す、またはあなただけの両方のケースを一致させたい場合は、しかしeparately S(事故により:)?):

val reg = "o".r.unanchored 
"foo" match { 
    case reg.anchored() => "Anchored! 
    case reg() => "Unanchored" 
    case _ => "I dunno" 
} 
関連する問題