以下代码的返回完全不符合我的预期:
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时我必须在组捕获中命名组才会完全忽略它们?
答案 0 :(得分:5)
恰好名称:groups
具有误导性。它不是所有组,而只是命名组。这就是we are renaming :groups
to :named
in upcoming releases的原因。您可以使用capture: :all_but_first
获得所需的行为。我将很快记录这个选项。