正则表达式 - 为什么命名组位于组数组的末尾?

时间:2015-04-01 19:43:59

标签: c# .net regex text

为什么命名组位于组数组的末尾?

模式例如(带有命名组和未命名组):

(?<digit>\d+)\|(?<main>\d+)\|(\d+)\|(?<abc>\d+)\|(\d+)

和文字:

123|456|789|10|11

为什么“789”和“11”位于数组的开头?

enter image description here

请参阅演示systemtextregularexpressions.com

对不起我的英文:)

1 个答案:

答案 0 :(得分:1)

嗯......它只是.NET Framework中的一个实现选择。

documentation解释了算法:

  

可以按编号访问未命名和已命名的捕获组。未命名的组从1开始从左到右编号。(索引0中的捕获组(零)表示整个匹配。)命名组然后从左到右编号,从一个更大的数字开始而不是未命名的捕获组的数量。

同样不一定适用于其他风格,例如PCRE按照它们出现在模式中的顺序分配组号,无论它们是否被命名。