4

以下代码的返回完全不是我所期望的:

iex(12)> Regex.scan(%r/(?<groupname>a)b(c)/g,"abcdabcd", capture: :groups)
[["a"], ["a"]]

有 2 个组,但结果中只出现了命名的一组。而且组名也被完全忽略了。

如果我使用 named_capture,我会得到以下信息:

iex(14)> Regex.named_captures(%r/(?<groupname>a)b(c)/g,"abcdabcd", capture: :groups)
[groupname: "a"]

嗯,我认为结果

Regex.scan(%r/(?<groupname>a)b(c)/g,"abcdabcd", capture: :groups)

应该是

[["a", "c"], ["a", "c"]]    #=> including "anonymous groups"

或者

[[groupname: "a"], [groupname: "a"]] #=> include group name in the results

所以我的问题是为什么我必须在使用 Regex.scan 时在组捕获中命名组,以便完全忽略它们?

4

1 回答 1

5

碰巧这个名字:groups有误导性。它并不意味着是所有组,而只是指定的组。这就是我们在即将发布的版本中重命名:groups:named的原因。您可以使用capture: :all_but_first. 我将很快记录这个选项。

于 2014-02-19T18:19:25.700 回答