문제

Haskell의 Posix 구현에 대한 괜찮은 문서를 찾을 수없는 것 같습니다. 특히 모듈 Text.Regex.Posix.

누구든지 문자열에서 멀티 라인 매칭을 사용하는 올바른 방향으로 나를 가리킬 수 있습니까?

호기심을위한 스 니펫 :

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

Wikipedia 페이지의 출처를 추출하려고하지만이 방법은 하나 이상의 줄이 관련 될 때 분명히 넘어갑니다.

도움이 되었습니까?

해결책

필요할 수 있습니다 import Text.Regex.Base.RegexLike 액세스를 위해 makeRegexOpts 그리고 친구들.

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

글쎄, 그 이후로 Text.Regex.Posix'에스 defaultCompOpt = compExtended + compNewline, 그것은 동등하게 작동합니다

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

첫 번째 그룹을 꺼내려면 다른 인스턴스 중 하나를 사용하십시오. RegexLike. 한 가지 가능성은

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

다른 팁

Posix Regexes보다 유연하거나 성능이 향상 된 경우 PCRE 백엔드를 대신 사용해야 할 수도 있습니다.

PCRE-Light와 Regex-PCRE는 모두 괜찮습니다.

나는이 경우 일치하여 해결했다

((.*)|\n*)*

이것은 당신의 표현에 따라 항상 작동하지는 않지만. 위의 솔루션은 아마도 가능하다면 가장 좋은 방법 일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top