我继承了一个包含以下正则表达式的代码块,我试图了解它是如何得到它的结果的.
var pattern = @"\[(.*?)\]";
var matches = Regex.Matches(user, pattern);
if (matches.Count > 0 && matches[0].Groups.Count > 1)
...
Run Code Online (Sandbox Code Playgroud)
输入user == "Josh Smith [jsmith]":
matches.Count == 1
matches[0].Value == "[jsmith]"
Run Code Online (Sandbox Code Playgroud)
......我明白了.但是之后:
matches[0].Groups.Count == 2
matches[0].Groups[0].Value == "[jsmith]"
matches[0].Groups[1].Value == "jsmith" <=== how?
Run Code Online (Sandbox Code Playgroud)
看着这个问题从我了解的群体集合存储在整场比赛以及之前的比赛.但是,上面的正则表达式是否只与[空方括号] [文本] [关闭方括号]匹配,那么为什么"jsmith"会匹配?
此外,群组集合是否总是存储2组:整场比赛和最后一场比赛?
age*_*t-j 105
match.Groups[0]总是相同match.Value,这是整场比赛.match.Groups[1] 是正则表达式中的第一个捕获组.考虑这个例子:
var pattern = @"\[(.*?)\](.*)";
var match = Regex.Match("ignored [john] John Johnson", pattern);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,
match.Value 是 "[john] John Johnson"match.Groups[0]总是一样的match.Value,"[john] John Johnson".match.Groups[1]是一组来自的(.*?).match.Groups[2]是一组来自的(.*).match.Groups[1].Captures 是另一个维度.考虑另一个例子:
var pattern = @"(\[.*?\])+";
var match = Regex.Match("[john][johnny]", pattern);
Run Code Online (Sandbox Code Playgroud)
请注意,我们正在寻找连续的一个或多个括号内的名称.您需要能够单独获取每个名称.进入Captures!
match.Groups[0]总是一样的match.Value,"[john][johnny]".match.Groups[1]是一组来自的(\[.*?\])+.与match.Value此案例相同.match.Groups[1].Captures[0] 是相同的 match.Groups[1].Valuematch.Groups[1].Captures[1] 是 [john]match.Groups[1].Captures[2] 是 [johnny]zel*_*lio 24
的( )充当捕获基团.因此,matches数组具有C#在您的字符串中找到的所有匹配项,并且子数组具有这些匹配项中的捕获组的值.如果你不想要那个额外级别的捕获jut删除了( ).
| 归档时间: |
|
| 查看次数: |
50899 次 |
| 最近记录: |