一尘不染

C#中的正则表达式组

c#

我继承了一个包含以下正则表达式的代码块,并且试图了解它如何获得结果。

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

对于输入user == "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" <=== how?

看着这个问题从我了解的群体集合存储在整场比赛以及之前的比赛。但是,上面的正则表达式不只适用于[方括号] [文本] [方括号],那么“
jsmith”为什么会匹配?

另外,groups集合是否总是会精确地存储2个组:整个匹配项和最后一个匹配项?


阅读 244

收藏
2020-05-19

共1个答案

一尘不染

( )充当捕获基团。因此matchs数组具有C#在您的字符串中找到的所有匹配项,而sub数组具有这些匹配项内的捕获组的值。如果您不希望额外捕获水平,请删除( )

2020-05-19