Regex 提取Haskell中两个子字符串之间的字符串

Regex 提取Haskell中两个子字符串之间的字符串,regex,haskell,substring,Regex,Haskell,Substring,我想将这个SO问题中的python正则表达式PCRE技术应用于Haskell,以便在Haskell中也可以这样做 但我不知道如何使它在GHC 8.2.1中工作。我已经安装了cabal install regex pcre,经过一些搜索,我得到了以下测试代码: import Text.Regex.PCRE s = "+++asdf=5;iwantthis123jasd---" result = (s ++ s) =~ "asdf=5;(.*)123jasd" :: [[String]] 我希望得

我想将这个SO问题中的python正则表达式PCRE技术应用于Haskell,以便在Haskell中也可以这样做

但我不知道如何使它在GHC 8.2.1中工作。我已经安装了cabal install regex pcre,经过一些搜索,我得到了以下测试代码:

import Text.Regex.PCRE
s = "+++asdf=5;iwantthis123jasd---"
result = (s ++ s) =~ "asdf=5;(.*)123jasd" :: [[String]]
我希望得到中间弦的第一个和最后一个实例

iwantthis
但我不能得到正确的结果:

[[asdf=5;我要这个123JASD-->+asdf=5;我要这个123JASD,我要这个123JASD-->+asdf=5;我要这个]]

我以前没有在Haskell中使用过正则表达式或pcre

有人能帮助正确使用提取第一个和最后一个事件吗? 另外,我不太理解这里的用法::[[String]]。它是做什么的,为什么有必要


我搜索了,但没有发现使用类型转换为::[[String]]的用法。

您获得的结果如下:

Prelude Text.Regex.PCRE> (s ++ s) =~ "asdf=5;(.*)123jasd" :: [[String]]
[["asdf=5;iwantthis123jasd---+++asdf=5;iwantthis123jasd","iwantthis123jasd---+++asdf=5;iwantthis"]]
这是正确的,第一个元素是整个正则表达式的隐式捕获组0,第二个元素是与之匹配的捕获组1。因为它匹配如下:

+++asdf=5;iwantthis123jasd---+++asdf=5;iwantthis123jasd--- 现在我们得到了两个匹配项。每场比赛我都将其作为第1组

你可以用地图头。尾巴还是地图!!1,以获取捕获的列表。*?第部分:


您获得的结果如下:

Prelude Text.Regex.PCRE> (s ++ s) =~ "asdf=5;(.*)123jasd" :: [[String]]
[["asdf=5;iwantthis123jasd---+++asdf=5;iwantthis123jasd","iwantthis123jasd---+++asdf=5;iwantthis"]]
这是正确的,第一个元素是整个正则表达式的隐式捕获组0,第二个元素是与之匹配的捕获组1。因为它匹配如下:

+++asdf=5;iwantthis123jasd---+++asdf=5;iwantthis123jasd--- 现在我们得到了两个匹配项。每场比赛我都将其作为第1组

你可以用地图头。尾巴还是地图!!1,以获取捕获的列表。*?第部分:

地图1可能更可读,因为数字表示capture group.map!!1可能更具可读性,因为数字表示捕获组。