Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 无法捕获字符串中的组_Regex_Haskell - Fatal编程技术网

Regex 无法捕获字符串中的组

Regex 无法捕获字符串中的组,regex,haskell,Regex,Haskell,我想以字符串形式捕获组: import Text.Regex.Posix "somestring; somestring2=\"(.*?)\"" =~ "somestring; somestring2=\"my_super_string123\"" :: String 它返回一个空字符串,与我期望的超级字符串123相反。我试过::[String]和::[[String]],很明显,它们是空的。您的建议?问题是您的字符串和模式被交换了。您还希望返回类型为[[String]]: 请注意,我必须删除

我想以字符串形式捕获组:

import Text.Regex.Posix
"somestring; somestring2=\"(.*?)\"" =~ "somestring; somestring2=\"my_super_string123\"" :: String

它返回一个空字符串,与我期望的超级字符串123相反。我试过::[String]和::[[String]],很明显,它们是空的。您的建议?

问题是您的字符串和模式被交换了。您还希望返回类型为[[String]]:

请注意,我必须删除?从那个地方?模式的一部分。您必须从下拉列表中选择这两种POSIX风格才能看到,但它说这两种风格都不支持惰性量词。对于正则表达式,也可以使用否定而不是惰性,因为它可以提高性能,而不必回溯。要做到这一点,您必须将模式更改为

"somestring; somestring2=\"([^\"]*)\""
为了澄清,以下是我的GHCi的输出:

> "s1; s2=\"my_super_string123\"" =~ "s1; s2=\"([^\"]*)\"" :: [[String]]
[["s1; s2=\"my_super_string123\"","my_super_string123"]]
it :: [[String]]

> "s1; s2=\"my_super_string123\"" =~ "s1; s2=\"([^\"]*)\"" :: String
"s1; s2=\"my_super_string123\""
it :: String
1如您所见,当返回类型为字符串时,它返回与整个模式匹配的任何文本,而不仅仅是捕获组。要获取各个捕获组的内容,请使用[[String]]

我编辑了字符串的内容,这样它就可以在不需要水平滚动的情况下进行匹配,只是为了说明。
***异常:用户错误Text.Regex.Posix.String无效:返回代码13,重复运算符操作数invalid@AlexanderSupertramp啊,对不起,我忘了我也犯了那个错误。是否删除?从模式中。@AlexanderSupertramp检查正则表达式味道的比较。您可以使用下拉列表选择这两种POSIX风格,它表示它们都不支持*?懒惰的量词。我为什么要删除?我需要它,因为我的超级字符串123可能存在于原始字符串中,也可能不存在于原始字符串中。我不需要它是[[string]],我只需要捕获我的超级字符串123。
> "s1; s2=\"my_super_string123\"" =~ "s1; s2=\"([^\"]*)\"" :: [[String]]
[["s1; s2=\"my_super_string123\"","my_super_string123"]]
it :: [[String]]

> "s1; s2=\"my_super_string123\"" =~ "s1; s2=\"([^\"]*)\"" :: String
"s1; s2=\"my_super_string123\""
it :: String