我很抱歉,如果这件事重复,但我看不出这些问题已经回答了我的问题。
你能帮忙解释一下:
仅针对name
举行的匹配或捕获在哪里?模式[A-Za-z0-9_\-\.]+
的初始部分没有在括号中显示,所以我理解它不是一个组,然后name
如何被捕获并保存为Match 0
的组件? / p>
如果我将字符串t2
替换为name@domain.com alt@yahoo.net
并将模式替换为^([A-Za-z0-9_\-\.\ ]+@(([A-Za-z0-9\-])+\.)+([A-Za-z\-])+)+$
0=com
并捕获1=net
,类似于群组2持有domain.
和{{1抓住,为什么?yahoo.
上述代码的输出:
static void Main(string[] args)
{
string t2 = "name@domain.com";
string p2 = @"^[A-Za-z0-9_\-\.\ ]+@(([A-Za-z0-9\-])+\.)+([A-Za-z\-])+$";
MatchCollection matches = Regex.Matches(t2, p2);
GroupCollection gc;
int groupIndex = 0;
int matchIndex = 0;
int captureIndex = 0;
foreach (Match nextMatch in matches)
{
gc = nextMatch.Groups;
Console.WriteLine("Match {0} holds: {1}", matchIndex, nextMatch.Value);
matchIndex++;
foreach (Group g in gc)
{
Console.WriteLine("Group {0} holding: {1}", groupIndex, g.ToString());
groupIndex++;
foreach (Capture capture in g.Captures)
{
Console.WriteLine("\tCapture {0} holds {1}", captureIndex, capture.ToString());
captureIndex++;
}
captureIndex = 0;
}
groupIndex = 0;
}
matchIndex = 0;
}
输出字符串Match 0 holds: name@domain.com
Group 0 holding: name@domain.com
Capture 0 holds name@domain.com
Group 1 holding: domain.
Capture 0 holds domain.
Group 2 holding: n
Capture 0 holds d
Capture 1 holds o
Capture 2 holds m
Capture 3 holds a
Capture 4 holds i
Capture 5 holds n
Group 3 holding: m
Capture 0 holds c
Capture 1 holds o
Capture 2 holds m
Press any key to continue . . .
和字符串t2 = "name@domain.com alt@yahoo.net";
;
p2 = @"^([A-Za-z0-9_\-\.\ ]+@(([A-Za-z0-9\-])+\.)+([A-Za-z\-])+)+$"
答案 0 :(得分:0)
Match
涵盖了整个正则表达式的匹配。正则表达式可以应用于给定的字符串。
Group
是Match
和Capture
的一部分(如果您指定了多个类似于(someRegex)的组)+所有Capture
s Group
。尝试将([A-Za-z\-])+
更改为([A-Za-z\-]+)
并查看差异!
示例:
\w*(123)\w*
上的 "asdsa123asdf"
\w*([123])+\w*
上的 "asdsa123asdf"
有多个网站可供测试并显示正则表达式的详细信息,例如https://regexr.com或https://regex101.com