查找正则表达式的所有捕获组

Hyp*_*eus 7 regex haskell

我正在寻找一个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中遗漏了什么吗?
  • 是否有一个实现findAll函数的Haskell正则表达式库?

Mik*_*kov 8

您可以使用以下=~运营商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看看会发生什么.此处列出您可以在此上下文中使用的所有类型.另请参阅本教程.