我正在使用Attoparsec,据说它默认采用回溯。但是下面这行代码:
parseOnly (string "foo" *> many1 anyChar <* string "bar") "fooxxxbar"
出现以下错误:
Left "not enough input"
为什么会这样?如果
many1 anyChar
决定只解析三个字符(xxx
),它应该是成功的。因为回溯的缘故,它应该在某个时候考虑这样做,不是吗?如何使用Attoparsec实现等效于
/foo(.*)bar/
正则表达式的正确方法?
manyTill
提出的解决方案在我的用例中效果不佳。 - Iguana Bob