首页  >  文章  >  后端开发  >  C# 中的正则表达式组如何捕获和访问匹配的子字符串?

C# 中的正则表达式组如何捕获和访问匹配的子字符串?

DDD
DDD原创
2024-10-29 18:48:57981浏览

How do Regular Expression Groups in C# Capture and Access Matched Substrings?

C# 中的正则表达式组:了解匹配结果

考虑以下 C# 代码块:

<code class="csharp">var pattern = @"\[(.*?)\]";
var matches = Regex.Matches(user, pattern);
if (matches.Count > 0 && matches[0].Groups.Count > 1)
    ...</code>

This代码使用正则表达式从用户输入字符串中提取括号内的文本。对于输入“Josh Smith [jsmith]”,代码正确返回以下结果:

matches.Count == 1
matches[0].Value == "[jsmith]"

但是,后续行提出了问题:

matches[0].Groups.Count == 2
matches[0].Groups[0].Value == "[jsmith]"
matches[0].Groups[1].Value == "jsmith"

匹配分组

在正则表达式中,组用于捕获匹配的特定部分。默认情况下,整个匹配项在组 0 中捕获。可以使用括号定义其他捕获组。

在提供的代码中,正则表达式定义单个捕获组,用 (.*?) 表示。该组捕获方括号内的文本(在本例中为 jsmith)。因此:

  • matches[0].Groups[0] 包含整个匹配,包括方括号: [jsmith]
  • matches[0].Groups[1] 包含括号内捕获的文本: jsmith

嵌套组

在更复杂的正则表达式中,可以有嵌套组。在这些情况下,每个组都包含自己的捕获集。但是,在给定的代码中,只有一层分组,因此:

  • matches[0].Groups[1].Captures 始终为空。

其他注意事项

  • 组 0: 请务必注意,组 0 始终包含整个匹配项,无论是否定义了任何捕获组。
  • 组数:正则表达式匹配中的组数取决于模式中定义的捕获组的数量。在提供的示例中,只有一个捕获组,因此总共有两组。

以上是C# 中的正则表达式组如何捕获和访问匹配的子字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn