Question

Je n'arrive pas à trouver une documentation décente sur l'implémentation POSIX de haskell. Plus précisément, le module Text.Regex.Posix .

Quelqu'un peut-il m'indiquer la bonne direction pour utiliser la correspondance multiligne sur une chaîne?

Un extrait pour les curieux:

> extractToken body = body =~ "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>" :: String

J'essaie d'extraire la source des pages wikipedia, mais cette méthode échoue clairement lorsque plusieurs lignes sont impliquées.

Était-ce utile?

La solution

Vous devrez peut-être importer Text.Regex.Base.RegexLike pour accéder à makeRegexOpts et à vos amis.

extractToken body = match regex body where
    regex = makeRegexOpts (defaultCompOpt - compNewline) defaultExecOpt
              "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"

Eh bien, puisque Text.Regex.Posix du defaultCompOpt = compExtended + compNewline , cela fonctionne de manière équivalente à

extractToken body = match regex body where
    regex = makeRegexOpts compExtended defaultExecOpt
              "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"

Pour extraire uniquement le premier groupe, utilisez l'une des autres instances de RegexLike . Une possibilité est

extractToken body = head groups where
    (preMatch, inMatch, postMatch, groups) =
        match regex body :: (String, String, String, [String])
    regex = makeRegexOpts compExtended defaultExecOpt
              "<textarea[^>]*id=\"wpTextbox1\"[^>]*>(.*)</textarea>"

Autres conseils

Vous devrez peut-être utiliser le backend PCRE à la place si vous souhaitez faire quelque chose de plus souple ou de meilleur rendement que les expressions rationnelles Posix.

pcre-light et regex-pcre vont bien.

J'ai résolu dans ce cas en faisant correspondre

((.*)|\n*)*

Bien que cela puisse ne pas toujours fonctionner en fonction de votre expression. La solution ci-dessus est probablement la meilleure voie à suivre si vous le pouvez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top