我正在使用 parsec Haskell 库。
我想解析以下类型的字符串:
[[v1]][[v2]]
xyz[[v1]][[v2]]
[[v1]]xyz[[v2]]
等等
我很感兴趣只收集值 v1 和 v2,并将它们存储在数据结构中。
我尝试使用以下代码:
import Text.ParserCombinators.Parsec
quantifiedVars = sepEndBy var (string "]]")
var = between (string "[[") (string "") (many (noneOf "]]"))
parseSL :: String -> Either ParseError [String]
parseSL input = parse quantifiedVars "(unknown)" input
main = do {
c <- getContents;
case parse quantifiedVars "(stdin)" c of {
Left e -> do { putStrLn "Error parsing input:"; print e; };
Right r -> do{ putStrLn "ok"; mapM_ print r; };
}
}
这样,如果输入是"[[v1]][[v2]]"
程序工作正常,返回以下输出:
"v1"
"v2"
如果输入是"xyz[[v1]][[v2]]"
程序不起作用。特别是,我只想要 中包含的内容[[...]]
,而忽略"xyz"
.
另外,我想将 的内容存储[[...]]
在数据结构中。
你怎么解决这个问题?