使用RegEx扫描组

时间:2014-02-19 13:23:09

标签: regex elixir

以下代码的返回完全不符合我的预期:

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时我必须在组捕获中命名组才会完全忽略它们?

1 个答案:

答案 0 :(得分:5)

恰好名称:groups具有误导性。它不是所有组,而只是命名组。这就是we are renaming :groups to :named in upcoming releases的原因。您可以使用capture: :all_but_first获得所需的行为。我将很快记录这个选项。