如何在Scala RegexParsers匹配中排除换行符?

时间:2018-01-04 20:51:41

标签: regex scala

我想要的东西基本上与多行字符串的行尾相匹配。理想情况下是这样的:

def almostAnything: Parser[String] = """[^\r\n]+""".r ^^ { _.toString.trim }

问题是......这不起作用。它忽略了否定的\ n并且只是在\ n。

之后保持匹配到下一个字符串块

为什么会这样,我怎样才能成功匹配任何直到行尾(!=字符串结尾)?

1 个答案:

答案 0 :(得分:1)

我不确定解析器是如何工作的,但是你在这里遇到的问题不在于你的正则表达式,而在于Regex的工作方式。

默认情况下,Regex被锚定 - 它们希望匹配整个字符串。如果你想要部分匹配(似乎你这样做),你必须解开它们。

例如:

 val sameLine = """([^\r\n]+)""".r.unanchored

 "45ft\n  something" match {
   case sameLine(c) => Some(c)
   case _ => None
 }

这会产生Some(45ft)