【发布时间】:2014-06-08 12:47:58
【问题描述】:
我想解析这样的输入字符串:"this is \"test \" message \"sample\" text"
现在,我编写了一个解析器,用于解析不带引号的单个文本:
parseString :: Parser String
parseString = do
char '"'
x <- (many $ noneOf "\"")
char '"'
return x
这会解析像这样的简单字符串:"test message"
然后我为带引号的字符串写了一个解析器:
quotedString :: Parser String
quotedString = do
initial <- string "\\\""
x <- many $ noneOf "\\\""
end <- string "\\\""
return $ initial ++ x ++ end
这样的字符串解析器:\"test message\"
有没有一种方法可以将两个解析器结合起来,从而获得我想要的目标?解决这个问题的具体方法是什么?
【问题讨论】:
-
为什么要去掉首尾引号,而保留转义的反斜杠?我认为您希望将输入
"\"ab\\\"c\""解析为"\"ab\\\"c\""(严格解析以进行验证)或"ab\"c",但您似乎想要"ab\\\"c",这似乎并不那么明显有用。 -
@dfeuer 没有什么特别的原因,只是在玩 Parsec。