Poszukuję funkcji Haskell, która zwraca grupy przechwytujące wszystkich dopasowań danego wyrażenia regularnego.Znajdź wszystkie przechwytujące grupy wyrażenia regularnego
Patrzyłem na Text.Regex, ale nie mogłem tam niczego znaleźć.
Teraz używam tego obejścia, który wydaje się działać:
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, []))
Wynik:
findAll "x(.)x(.)" "aaaxAxaaaxBxaaaxCx"
[["A","a"],["B","a"]]
Pytanie:
- Coś mnie ominęło w Text.Regex?
- Czy istnieje biblioteka wyrażeń regularnych Haskell, która implementuje funkcję findAll?
Nie wiedziałem, że istnieje interfejs inny niż "= ~" do reguł przed ... – fuz
@FUZxxl Ładne pseudo liczby mnogiej wyrażenia regularnego. Naprawdę się śmiałem. regex, regicis, regici, regicem, o regex, regice ... Czy to powszechne użycie? – Hyperboreus
@Hyperboreus Wyprowadziłem go z indeksu (indeksy), choć wydaje się, że nie jest to zwykła liczba mnoga, która jest wyrażeń regularnych. – fuz