我正在寻找一个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, [] ) )
Run Code Online (Sandbox Code Playgroud)
结果:
findAll "x(.)x(.)" "aaaxAxaaaxBxaaaxCx"
[["A","a"],["B","a"]]
Run Code Online (Sandbox Code Playgroud)
题:
您可以使用以下=~运营商Text.Regex.Posix:
Prelude> :mod + Text.Regex.Posix
Prelude Text.Regex.Posix> "aaaxAxaaaxBxaaaxCx" =~ "x(.)x(.)" :: [[String]]
[["xAxa","A","a"],["xBxa","B","a"]]
Run Code Online (Sandbox Code Playgroud)
请注意显式[[String]]类型.试着用替换它Bool,Int,String看看会发生什么.此处列出了您可以在此上下文中使用的所有类型.另请参阅本教程.