我正在尝试使用以下代码构建一个单独引用字符串的解析器:
def colValue = (NULL | boolean | decimalNumber | "'" ~> """[^']*""".r <~ "'")
问题在于,这当然与包含\'
的字符串不匹配,甚至与前面的斜杠不匹配。但这与'hello hello'
匹配,但不匹配'hello\'hello
有没有办法解析单引号字符串?我使用JavaTokenParser
但我无法使用stringLiteral
,因为字符不会使用\\
转义,也不会用双引号括起来。
谢谢
答案 0 :(得分:0)
可能有多种方法可以实现这一目标,但有一种方法是在正则表达式中使用lookbehind,以便在'
之前匹配\
。
def quotedStr = "'" ~> """([^']|(?<=\\)')*""".r <~ "'"
这会在输出中留下\
s,之后可以将其删除:
def quotedStr =
"'" ~> ("""([^']|(?<=\\)')*""".r ^^ ((_: String).replace("\\'","'"))) <~ "'"