为什么超出范围的索引不会引发正则表达式 GroupCollection 的异常?

Why doesn't out of range indexes throw an exception for Regex GroupCollection?

提问人:Router 提问时间:6/23/2022 更新时间:6/23/2022 访问量:94

问:

通常,如果尝试访问不存在的数组成员,则会收到“IndexOutOfRangeException”。

但是,出于某种原因,我不明白正则表达式 GroupCollection。

例如:

    var match = Regex.Match("", "a");
    var test = match.Groups[6];

尽管只有 1 个组,但不会引发异常。match

为什么会这样?

C# 正则表达式 异常 匹配

评论

1赞 Klaus Gütter 6/23/2022
它以这种方式记录。很难推测这个设计决策的动机,
3赞 Wiktor Stribiżew 6/23/2022
"如果 groupnum 不是集合成员的索引,或者 groupnum 是输入字符串中未匹配的捕获组的索引,则该方法将返回一个 Group 对象,该对象的 Group.Success 属性为 false,其 Group.Value 属性为 String.Empty。"

答:

2赞 Wiktor Stribiżew 6/23/2022 #1

这是设计使然。

请参阅 GroupCollection 文档

如果 groupnum 不是集合成员的索引,或者是输入字符串中未匹配的捕获组的索引,则该方法将返回一个 Group 对象,该对象的 Group.Success 属性为 且其属性为 String.EmptygroupnumfalseGroup.Value

我加粗了这句话的开头,因为它描述了您当前的场景:正则表达式模式在空字符串中找不到匹配项,匹配项为空,并且没有 ID = 6 的组。a