gpt4 book ai didi

parsing - haskell 秒差距 : Undo a failed many

转载 作者:行者123 更新时间:2023-12-02 09:35:59 27 4
gpt4 key购买 nike

我这里有一些代码可用于将 URI 路径解析为字符串列表。例如,/user/home 将变为 ["user", "home"]

pathPiece :: Parser String   
pathPiece = do
char '/'
path <- many1 urlBaseChar
return path

uriPath :: Parser [String]
uriPath = do
pieces <- many pathPiece
try $ char '/'
return pieces

parseUriPath :: String -> [String]
parseUriPath input = case parse uriPath "(unknown)" input of
Left _ -> []
Right xs -> xs

但是,如果路径以另一个 / 结尾,例如 /user/home/(这应该是合法路径),则解析器将失败。这是因为 pathPiece 无法解析最后一个 /,因为没有后续的 urlBaseChars。我想知道你如何解析许多直到它失败,如果失败你撤消字符消耗。

最佳答案

试试这个:

pathPiece :: Parser String   
pathPiece = try $ do
char '/'
many1 urlBaseChar

uriPath :: Parser [String]
uriPath = do
pieces <- many pathPiece
optional (char '/')
return pieces

您需要添加trypathPiece 。否则,解析最终的 /将使秒差距认为一个新的pathPiece已经开始,并且没有try ,没有回溯。还,除非您确实想要需要最终的 / ,你需要做到optional 。这功能try不这样做。

关于parsing - haskell 秒差距 : Undo a failed many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23003446/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com