使用解析器组合器解析单引号字符串

时间:2013-12-01 21:38:07

标签: scala parsing

我正在尝试使用以下代码构建一个单独引用字符串的解析器:

def colValue = (NULL | boolean | decimalNumber | "'" ~> """[^']*""".r <~ "'")

问题在于,这当然与包含\'的字符串不匹配,甚至与前面的斜杠不匹配。但这与'hello hello'匹配,但不匹配'hello\'hello

有没有办法解析单引号字符串?我使用JavaTokenParser但我无法使用stringLiteral,因为字符不会使用\\转义,也不会用双引号括起来。

谢谢

1 个答案:

答案 0 :(得分:0)

可能有多种方法可以实现这一目标,但有一种方法是在正则表达式中使用lookbehind,以便在'之前匹配\

def quotedStr = "'" ~> """([^']|(?<=\\)')*""".r <~ "'"

这会在输出中留下\ s,之后可以将其删除:

def quotedStr =
  "'" ~> ("""([^']|(?<=\\)')*""".r ^^ ((_: String).replace("\\'","'"))) <~ "'"