Найти все группы захвата регулярного выражения

Я ищу функцию Haskell, которая возвращает группы захвата всех совпадений данного регулярного выражения.

Я смотрел Text.Regex , но ничего не нашел.

Теперь я использую этот обходной путь, который, кажется, работает:

import Text.Regex

findNext :: String -> Maybe (String, String, String, [String] ) -> [ [String] ]
findNext pattern Nothing = []
findNext pattern (Just (_, _, rest, matches) ) = 
    case matches of
        [] -> (findNext pattern res)
        _ -> [matches] ++ (findNext pattern res)
    where res = matchRegexAll (mkRegex pattern) rest

findAll :: String -> String -> [ [String] ]
findAll pattern str = findNext pattern (Just ("", "", str, [] ) )

Результат:

findAll "x(.)x(.)" "aaaxAxaaaxBxaaaxCx"
[["A","a"],["B","a"]]

Вопрос:

  • Я что-то пропустил в Text.Regex?
  • Есть ли Haskell библиотека регулярных выражений, реализующая функцию findAll?

7
задан Mikhail Glushenkov 18 July 2011 в 07:22
поделиться