因此,出于某种原因,在Scala 2.11中,我的锚定正则表达式模式充当了无锚的正则表达式模式。
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 :(得分:0)
findFirstIn
方法自动解锁正则表达式。
您可以看到示例代码仅匹配A
:
例:
"""\w+""".r findFirstIn "A simple example." foreach println // prints "A"
顺便说一句,一旦你创建了一个像"pattern".r
这样的正则表达式,默认情况下它会被锚定,但这只在你在match
块中使用正则表达式时才有意义。在FindAllIn
或FindFirstIn
内,只会忽略此类锚定。
因此,为了确保正则表达式匹配整个字符串,如果您不确定在哪里,请始终添加^
和$
(或\A
和\z
)锚点将使用正则表达式。
答案 1 :(得分:0)
我认为,它只能用于匹配:
val reg = "o".r.anchored
"foo" match {
case reg() => "Yes!"
case _ => "No!"
}
...返回“不!”。
这似乎没有用,因为默认情况下只有"o".r
被锚定。我可以想象的唯一用途是,如果你做了一些unanchored
(偶然?:)),然后想要撤消它,或者如果你只想匹配这两种情况,但是
eparately:
val reg = "o".r.unanchored
"foo" match {
case reg.anchored() => "Anchored!
case reg() => "Unanchored"
case _ => "I dunno"
}