私はparsec Haskellライブラリを使用しています。私は、次のような文字列を解析したいHaskellでの特定の文字列の解析
:
[[v1]][[v2]]
xyz[[v1]][[v2]]
[[v1]]xyz[[v2]]
など
私は唯一の値v1と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"
入力が"xyz[[v1]][[v2]]"
ある場合プログラムが動作しません。特に、私は[[...]]
に含まれているものだけを、"xyz"
を無視して欲しいです。
また、[[...]]
の内容をデータ構造に保存したいとします。
この問題をどうやって解決しますか?
'[['と ']]'で区切られていないものはスキップしますか? xyz [[v1]] [[v2]] "'と[[[v1]] xyz [[v2]] "はどちらも' ["v1"、 "v2"] 'を返すでしょうか? –
正規表現では簡単な作業のようです。 \\ [\\ [([^]] +)\\] \\] ' – Yuras