privatevoid RunMatch() { Regex r; Match m; statusBar.Panels[0].Text=""; statusBar.Panels[1].Text=""; statusBar.Panels[2].Text=""; InputBox.Select(0,0); // Unselect all the text Dirty=false; Skip=true; this.Cursor=Cursors.WaitCursor; if((r=MakeRegex())==null) { this.Cursor=Cursors.Default; return; } Tree.Nodes.Clear(); ResultsBox.Text=""; ShowBuilder(false); ShowTree(true); this.Cursor=Cursors.Default; // Store the results in the text box for (m = r.Match(InputBox.Text); m.Success; m = m.NextMatch()) { if(m.Value.Length>0) { Tree.Nodes.Add("["+m.Value +"]"); int ThisNode=Tree.Nodes.Count-1; Tree.Nodes[ThisNode].Tag=m; if(m.Groups.Count>1) { for (int i=1;i<m.Groups.Count;i++) { Tree.Nodes[ThisNode].Nodes.Add(r.GroupNameFromNumber(i)+": ["+m.Groups[i].Value+"]"); Tree.Nodes[ThisNode].Nodes[i-1].Tag=m.Groups[i]; //This bit of code puts in another level of nodes showing the captures for each group int Number=m.Groups[i].Captures.Count; if(Number>1) for(int j=0;j<Number;j++) { Tree.Nodes[ThisNode].Nodes[i-1].Nodes.Add(m.Groups[i].Captures[j].Value); Tree.Nodes[ThisNode].Nodes[i-1].Nodes[j].Tag=m.Groups[i].Captures[j]; } } } } } statusBar.Panels[0].Text=Tree.Nodes.Count.ToString()+" Matches"; Skip=false; }
(2)替换匹配项
privatevoid RunReplace() { Regex r; this.Cursor=Cursors.WaitCursor; statusBar.Panels[0].Text=""; statusBar.Panels[1].Text=""; statusBar.Panels[2].Text=""; InputBox.Select(0,0); // Unselect all the text Dirty=false; Skip=true; if((r=MakeRegex())==null) { this.Cursor=Cursors.Default; return; } Tree.Nodes.Clear(); ShowBuilder(false); ShowTree(false); this.Cursor=Cursors.Default; ResultsBox.Text=r.Replace(InputBox.Text,Replace.Text); Skip=false; statusBar.Panels[0].Text=""; }