正则表达式构造与测试小工具(下)

简介:



不多说废话了,直接贴一些重要的代码:
(1)查找匹配项:

        private void 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)替换匹配项
        private void 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="";
        }
(3)保存项目信息的两个类
    [Serializable]
    public class Settings
    {
        public string FileName="TheRegexAssembly.dll";
        public string ClassName="TheRegexClass";
        public string Namespace="TheRegex";
        public bool IsPublic=true;
        public string InputData= "";
        public string RegularExpression = "";
        public string ReplacementString = "";
        public bool IgnoreCase = true;
        public bool Multiline = true;
        public bool Singleline = false;
        public bool ExplicitCapture = false;
        public bool ECMAScript = false;
        public bool RightToLeft = false;
        public bool IgnorePatternWS = true;
        public bool Compiled = true;
        public int LeftPanelWidth = 470;
        public int TreeHeight = 150;
        public Size Size = new Size(800, 400);
    }

    public class RegistrySettings
    {
        public string[] MRUList = new string[0];
        public Point Location = new Point(100,100);
        public string ProjectFile ="";
        public string OpenPathName="";
        public string SavePathName="";
    }
(4)保存项目
    private bool SaveFileData()
        {
            settings.InputData=InputBox.Text;
            settings.IsPublic=MakeForm.IsPublic;
            settings.Namespace=MakeForm.Namespace;
            settings.ClassName=MakeForm.ClassName;
            settings.InputData=InputBox.Text;
            settings.ReplacementString=Replace.Text;
            settings.RegularExpression=RegexBox.Text;
            settings.IgnoreCase=IgnoreCase.Checked;
            settings.Multiline=Multiline.Checked;
            settings.Singleline=Singleline.Checked;
            settings.ExplicitCapture=Explicit.Checked;
            settings.ECMAScript=ECMA.Checked;
            settings.RightToLeft=RightToLeftBox.Checked;
            settings.IgnorePatternWS=IgnorePattern.Checked;
            settings.Compiled=Compiled.Checked;
            settings.LeftPanelWidth=LeftPanel.Width;
            if(IsVisible)settings.TreeHeight=Tree.Height;
            else settings.TreeHeight=SaveTreeHeight;
            settings.Size=this.Size;
            if(Savior.SaveToFile(settings, ProjectFileName))return true;
            else return false;
        }

(5)从设置文件中读取信息
        private bool ReadFileData()
        {
            settings = (Settings)Savior.ReadFromFile(settings,ProjectFileName);
            if(settings==null)return false;
            InputBox.Text=settings.InputData;
            Replace.Text=settings.ReplacementString;
            RegexBox.Text=settings.RegularExpression;
            MakeForm.FileName=settings.FileName;
            MakeForm.IsPublic=settings.IsPublic;
            MakeForm.Namespace=settings.Namespace;
            MakeForm.ClassName=settings.ClassName;
            IgnoreCase.Checked=settings.IgnoreCase;
            Multiline.Checked=settings.Multiline;
            Singleline.Checked=settings.Singleline;
            Explicit.Checked=settings.ExplicitCapture;
            ECMA.Checked=settings.ECMAScript;
            RightToLeftBox.Checked=settings.RightToLeft;
            IgnorePattern.Checked=settings.IgnorePatternWS;
            Compiled.Checked=settings.Compiled;
            LeftPanel.Width=settings.LeftPanelWidth;
            Tree.Height=settings.TreeHeight;
            SaveTreeHeight=Tree.Height;
            this.Size=settings.Size;
            return true;
        }
(6)树结点选择
private void Tree_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
        {
            if(Skip)return;
            if(Tree.SelectedNode.Parent==null) // Must be the top level node
            {
                Match m=(Match)Tree.SelectedNode.Tag;
                ResultsBox.Text=m.Value;
                statusBar.Panels[1].Text="Position: "+m.Index;
                statusBar.Panels[2].Text="Length: "+m.Length;
                if(m!=null && !Dirty)
                {
                    InputBox.Select(m.Index,m.Length);
                    InputBox.ScrollToCaret();
                }
            }
            else if(Tree.SelectedNode.Parent.Parent==null) // Must be a group
            {
                Group g=(Group)Tree.SelectedNode.Tag;
                ResultsBox.Text=g.Value;
                statusBar.Panels[1].Text="Position: "+g.Index;
                statusBar.Panels[2].Text="Length: "+g.Length;
                if(g!=null && !Dirty)
                {
                    InputBox.Select(g.Index,g.Length);
                    InputBox.ScrollToCaret();
                }
            }
            else // Must be a capture
            {
                Capture c=(Capture)Tree.SelectedNode.Tag;
                ResultsBox.Text=c.Value;
                statusBar.Panels[1].Text="Position: "+c.Index;
                statusBar.Panels[2].Text="Length: "+c.Length;
                if(c!=null && !Dirty)
                {
                    InputBox.Select(c.Index,c.Length);
                    InputBox.ScrollToCaret();
                }
            }
        }

自动构建正则表达式我也见识过一个这样的工具,不过我对其实现机制还是不大理解,慢慢再说吧,就写这里了,太累了,。。。



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/08/01/465331.html,如需转载请自行联系原作者
目录
相关文章
|
15天前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
23 0
|
30天前
|
jenkins 测试技术 持续交付
现代软件测试中的自动化工具与挑战
随着软件开发领域的不断发展,自动化测试工具在测试过程中扮演着越来越重要的角色。本文将探讨现代软件测试中自动化工具的应用及面临的挑战,旨在帮助开发人员和测试人员更好地理解和应对自动化测试中的问题。
|
15天前
|
测试技术 Linux Apache
网站压力测试工具webbench图文详解
网站压力测试工具webbench图文详解
12 0
|
17天前
|
人工智能 分布式计算 Kubernetes
人工智能,应该如何测试?(三)数据构造与性能测试篇
本文探讨了人工智能场景中的性能测试,区别于传统互联网测试,其复杂性更高。主要关注点包括两类AI产品——业务类和平台类,后者涉及AI全生命周期,测试难度更大。测试重点是模型训练的性能,特别是数据模拟。需要构造大量结构化数据,如不同规模、分布、分片和特征规模的数据,以评估算法效率。此外,还涉及模拟设备规模(如视频流)和节点规模(边缘计算),以测试在大规模负载下的系统性能。文中提到了使用工具如Spark、ffmpeg、流媒体服务器和Kubernetes(K8S)的扩展项目,如Kubemark,来模拟大规模环境。最后,文章介绍了使用Golang进行异步IO操作以构建海量小文件,优化IO性能。
38 0
|
17天前
|
安全 测试技术
深入理解白盒测试:方法、工具与实践
【4月更文挑战第7天】 在软件开发的质量控制过程中,白盒测试是确保代码逻辑正确性的关键步骤。不同于黑盒测试关注于功能和系统的外部行为,白盒测试深入到程序内部,检验程序结构和内部逻辑的正确性。本文将探讨白盒测试的核心技术,包括控制流测试、数据流测试以及静态分析等方法,同时介绍当前流行的白盒测试工具,并讨论如何在实际项目中有效实施白盒测试。文章的目标是为软件测试工程师提供一份综合性指南,帮助他们更好地理解和应用白盒测试技术。
|
23天前
|
Java 测试技术 API
软件测试中的自动化工具与策略
软件测试是确保软件质量的重要环节,而自动化测试工具和策略的应用在提高测试效率和准确性方面发挥着重要作用。本文将介绍几种常见的自动化测试工具,并探讨在软件测试中应用自动化测试的最佳实践和策略。
|
25天前
|
Web App开发 Java 测试技术
深入理解与应用软件自动化测试工具Selenium
随着软件开发的快速发展,软件测试在保证产品质量方面发挥着越来越重要的作用。其中,自动化测试以其效率高、成本低的特点受到了广大开发者的欢迎。本文主要介绍了自动化测试工具Selenium的基本概念、原理以及在实际开发中的应用,旨在帮助读者更好地理解和使用Selenium进行高效的自动化测试。
22 4
|
1月前
|
人工智能 测试技术 虚拟化
现代软件测试中的自动化工具与技术
随着信息技术的迅猛发展,现代软件开发和测试领域也在不断创新。本文将探讨现代软件测试中自动化工具与技术的应用。通过分析自动化测试的优势、挑战以及最佳实践,帮助读者更好地理解当前软件测试领域的发展趋势,并为实际工作提供参考。
19 1
|
1月前
|
编译器 Python
Python正则表达式的7个使用典范(推荐)
Python正则表达式的7个使用典范(推荐)
22 0
|
1月前
|
Python
Python实现正则表达式匹配。
【2月更文挑战第11天】【2月更文挑战第30篇】Python实现正则表达式匹配。

热门文章

最新文章