以下代码的返回完全不是我所期望的:
iex(12)> Regex.scan(%r/(?<groupname>a)b(c)/g,"abcdabcd", capture: :groups)
[["a"], ["a"]]
Run Code Online (Sandbox Code Playgroud)
有2组,但只有命名的组出现在结果中.并且组名完全被忽略.
如果我使用named_capture,我会得到以下内容:
iex(14)> Regex.named_captures(%r/(?<groupname>a)b(c)/g,"abcdabcd", capture: :groups)
[groupname: "a"]
Run Code Online (Sandbox Code Playgroud)
好吧,我认为结果
Regex.scan(%r/(?<groupname>a)b(c)/g,"abcdabcd", capture: :groups)
Run Code Online (Sandbox Code Playgroud)
应该是
[["a", "c"], ["a", "c"]] #=> including "anonymous groups"
Run Code Online (Sandbox Code Playgroud)
要么
[[groupname: "a"], [groupname: "a"]] #=> include group name in the results
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么在使用Regex.scan时我必须在组捕获中命名组才会完全忽略它们?
碰巧这个名字:groups具有误导性.它不是所有组,而只是命名组.这就是为什么我们要重命名:groups,以:named在即将发布的版本.您可以通过使用获得所需的行为capture: :all_but_first.我将很快记录这个选项.
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |