我正在寻找一个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"]]
问题:
答案 0 :(得分:8)
您可以使用Text.Regex.Posix
中的=~
运算符:
Prelude> :mod + Text.Regex.Posix
Prelude Text.Regex.Posix> "aaaxAxaaaxBxaaaxCx" =~ "x(.)x(.)" :: [[String]]
[["xAxa","A","a"],["xBxa","B","a"]]
请注意显式[[String]]
类型。尝试将其替换为Bool
,Int
,String
,看看会发生什么。您可以在此上下文中使用的所有类型都列出here。另请参阅this tutorial。