代码之家  ›  专栏  ›  技术社区  ›  Waiting for Dev...

parsc:解析满足某些谓词的字符串

  •  0
  • Waiting for Dev...  · 技术社区  · 8 年前

    Parsc已经有了 satisfy 当给定谓词返回时成功的分析器 True 当应用于给定字符时:

    punctuationOrSymbol = satisfy isPunctuation <|> satisfy isSymbol
    

    如何对整个字符串执行类似的操作?我需要它,因为我想解析一个URI,但前提是它是有效的。为此,我想利用 isURI function in network-uri package . 比如:

    uri :: ParsecT s u m URI
    uri = parseURI <$> satisfyForString isURI
    

    我怀疑这和 token 功能,但我是哈斯克尔的新手,我还没能很好地理解它。

    1 回复  |  直到 8 年前
        1
  •  4
  •   Waiting for Dev...    8 年前

    ParsecT 是的一个实例 Alternative ,以便使用 guard 这样做:

    predicateP :: (a -> Bool) -> Parsec s u a -> Parsec s u a
    predicateP pr p = do
       x <- p
       guard $ pr x
       return x
    

    如果这已经在某个地方作为一个组合体存在,我不会感到惊讶,但我并不十分熟悉 parsec .

    现在,这只为您提供了一种应用谓词的方法;要将其应用于字符串,您必须首先获得一个您认为是或可能是URL的字符串。如何得到这些取决于您的域(例如,在分析XML时,您很可能会在属性或文本内容中找到它们)。

    推荐文章