我正在使用parsec Haskell庫。解析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"
。
另外,我想將[[...]]
的內容存儲在數據結構中。
你如何解決這個問題?
所以你想跳過任何沒有用[['和']]分隔的東西嗎? ''「xyz [[v1]] [[v2]]」''和'「[[v1]] xyz [[v2]]」'都會產生'[「v1」,「v2」]'? – 2012-02-14 14:43:14
它看起來像正則表達式的簡單任務。像\\ [\\ [([^]] +)\\] \\]' – Yuras 2012-02-14 22:14:31