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"
을 무시하고 싶습니다.
또한 [[...]]
의 내용을 데이터 구조에 저장하려고합니다.
이 문제를 어떻게 해결합니까?
그래서'[['and']]'로 구분하지 않은 것을 건너 뛰고 싶습니까? xyz [[v1]] [[v2]] "'와 [[[v1]] xyz [[v2]]"는 모두 [[ "v1", "v2"]' –
정규 표현식에서는 쉬운 작업입니다. '\\ [\\ [([^]] +) \\] \\]' – Yuras