many1 anyChar manyTill1 p e = (:) p m-6ren">
gpt4 book ai didi

regex - Attoparsec 解析失败但不应该有适当的回溯

转载 作者:行者123 更新时间:2023-12-01 10:44:37 25 4
gpt4 key购买 nike

我正在使用据说默认回溯的 Attoparsec。但是,以下行:

parseOnly  (string "foo" *> many1 anyChar <* string "bar") "fooxxxbar"

失败:

Left "not enough input"

为什么会这样?如果 many1 anyChar 决定只解析三个字符 (xxx),它应该会成功。由于回溯,它应该考虑在某个时候这样做,不是吗?

使用 Attoparsec 执行等同于 /foo(.*)bar/ 正则表达式的正确方法是什么?

最佳答案

I am using Attoparsec which is said to backtrack by default.

不完全是。 Attoparsec 确实支持回溯,但仅在某些明确的情况下(文档说明支持)。它的目的是进行高性能解析,不出所料,这在回溯方面效果不佳。

您正在寻找manyTillmanyTill'。请注意,文档中提到了回溯行为。

ghci> manyTill1 p e = (:) <$> p <*> manyTill p e 
ghci> parseOnly (string "foo" *> manyTill1 anyChar (string "bar")) "fooxxxbar"
Right "xxx"

关于regex - Attoparsec 解析失败但不应该有适当的回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442702/

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