Attoparsec:跳过(但不包括)多字符分隔符

时间:2015-05-25 21:25:37

标签: parsing haskell attoparsec

我有一个几乎可以包含任何字符的字符串。在字符串内部有分隔符{{{

例如:afskjdfakjsdfkjas{{{fasdf

使用attoparsec,编写Parser ()的惯用方式是什么,它会在{{{之前跳过所有字符,但不会消耗{{{

2 个答案:

答案 0 :(得分:2)

使用attoparsec的{​​{1}}(应用解析器而不消耗任何输入)和lookAhead编写一个解析器,消耗所有内容(但不包括){{1}分隔符。然后,您可以自由地应用该解析器并将其结果抛弃。

manyTill

在GHCi中:

{{{

答案 1 :(得分:0)

你可以用这样稍微强硬的方式做到这一点:

foo = many $ do
  Just c <- fmap (const Nothing) (try $ string "{{{") <|> fmap Just anyChar
  return c

或者你可以像这样使用这个辅助函数manyTill

foo = manyTill anyChar (try $ string "{{{")