- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我这里有一些代码可用于将 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
您需要添加try
至pathPiece
。否则,解析最终的 /
将使秒差距认为一个新的pathPiece
已经开始,并且没有try
,没有回溯。还,除非您确实想要需要最终的 /
,你需要做到optional
。这功能try
不这样做。
关于parsing - haskell 秒差距 : Undo a failed many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23003446/
Parsec 的解析模式“(some_input)”输入返回解析后的数据(如我在pattern中指定的那样。 如何知道它消耗了多少输入(该模式未使用 eof 锚定)?我不想通过所有模式的内部添加长度跟
我正在尝试解析 F# 类型语法。我开始编写 [F]Parsec 语法并遇到问题,所以我简化了 the grammar归结为: type ::= identifier | type -> type id
我将 Parsec 与自定义 Stream 类型结合使用。该流本质上是String,但有时它将在字符串中找到的输入扩展为其他字符串(想想别名扩展)。例如,给定“§4.1 ¶3”,它可能会将“Secti
我这里有一些代码可用于将 URI 路径解析为字符串列表。例如,/user/home 将变为 ["user", "home"]。 pathPiece :: Parser String pathPie
我有以下代码在页面加载时将主题更改为深色。问题是有 1 秒的间隔,每次我切换到其他页面时,屏幕都会闪烁 1 秒然后变黑。我如何替换 document.body.setAttribute('data-t
我是 Haskell 和 Parsec 的新手。看完Chapter 16 Using Parsec of Real World Haskell ,一个问题出现在我的脑海中:为什么以及什么时候 Pars
我是一名优秀的程序员,十分优秀!