今天在看一本书时,被C#的正则表达式的各种类搞糊涂了,而且网上的说明一股翻译腔或者根本不知所云。
private void button1_Click(object sender, EventArgs e)
{
int counter;
Match m;
CaptureCollection cc;
GroupCollection gc;
Regex r = new Regex("(Abc)+");
m=r.Match("XYZAbcAbcAbcXYZAbcAb");
gc=m.Groups;
for(int i = 0; i < gc.Count; i++)
{
cc = gc [i].Captures;
counter=cc.Count;
MessageBox.Show("Cap count" + counter.ToString());
for(int ii = 0; ii < counter; ii++)
{
MessageBox.Show(cc[ii]+"Start at"+cc[ii].Index);
}
}
}
这是运行结果,我通过debug大概了解到以下情况。
Regex用来存放匹配模板,即(Abc)+。
Match用来将给定的文本通过r进行匹配(注意,只匹配一次,这是我觉得很草的,我一直以为后面那个Abc也会被匹配),得到结果m。
m调用Groups,会有两种可能:一.有匹配上的,元素1是文本中被匹配到的,元素2就是r本身。
二、没有匹配成功,那么,这将得到一个有一空元素的集合。
建立在一的情况下,Captures是用模板来扫描元素1,并将其挨个拆分成数组元素存放。