也谈正则表达式

简介:

其实很早就知道了正则表达式,在集成VBScript脚本的时候,就看到了该功能,不过那时觉得很难,觉得也派不上什么用场,所以也没有过多关注。

最近看了孟岩老师的关于正则表达式讲解,有一种学习正则表达式的冲动,适时我们开发的项目中需要嵌入Python脚本功能,需要一个脚本编辑器,关键字变色等等相关功能用正则表达式实现相对容易的多。

前段时间买了本红皮书《C#字符串和正则表达式参考书》(这真是一本好书,想学习正则表达式的可以参考一下),花了几天的时间把该书看了一遍,正则表达式的用法基本上也弄清楚了,并且对字符串相关的知识也越来越感兴趣了。

对正则表达式的具体规则和使用,实没有什么可说的,网上的文章多的很,都说的比我的好。这是我学习正则表达式做的一个简单正则表达式测试工具,其实大部分代码就是上面书的一个示例(不知道为什么,上网竟没有找到该书的示例源码),又上网查了一些资料,把一些常见的正则表达式也嵌入了进去,方便了正则表达式的应用(以后有时间做一个比较理想的正则表达式工具)。

这是程序的截图:

 

相关源码:


 


 
 
  1. //获取正则表达式的匹配参数  
  2.        private RegexOptions GetSelectedRegexOptions()  
  3.        {  
  4.            RegexOptions selectedRegexOptions = RegexOptions.None;  
  5.  
  6.            if (this.IgnoreCaseChkBox.Checked)  
  7.                selectedRegexOptions |= RegexOptions.IgnoreCase;  
  8.            if (this.ExplicitCaptureChkBox.Checked)  
  9.                selectedRegexOptions |= RegexOptions.ExplicitCapture;  
  10.            if (this.ECMAScriptChkBox.Checked)  
  11.                selectedRegexOptions |= RegexOptions.ECMAScript;  
  12.            if (this.IgnoreCaseChkBox.Checked)  
  13.                selectedRegexOptions |= RegexOptions.IgnoreCase;  
  14.            if (this.MultiLineChkBox.Checked)  
  15.                selectedRegexOptions |= RegexOptions.Multiline;  
  16.            if (this.RightToLeftChkBox.Checked)  
  17.                selectedRegexOptions |= RegexOptions.RightToLeft;  
  18.            if (this.SingeLineChkBox.Checked)  
  19.                selectedRegexOptions |= RegexOptions.Singleline;  
  20.            return selectedRegexOptions;  
  21.  
  22.        }  
  23.  
  24.        private void TestRegexButton_Click(object sender, EventArgs e)  
  25.        {  
  26.            try 
  27.            {  
  28.                RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();  
  29.                Regex testRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);  
  30.                if (testRegex.IsMatch(this.InputTextBox.Text))  
  31.                {  
  32.                    this.ResultsTextBox.ForeColor = Color.Black;  
  33.                    this.ResultsTextBox.Text = "匹配成功";  
  34.                }  
  35.                else 
  36.                {  
  37.                    this.ResultsTextBox.ForeColor = Color.Red;  
  38.                    this.ResultsTextBox.Text = "匹配失败";  
  39.                }  
  40.            }  
  41.            catch (ArgumentException ex)  
  42.            {  
  43.                this.ResultsTextBox.ForeColor = Color.Red;  
  44.                this.ResultsTextBox.Text = "错误:"+ex.Message;  
  45.            }  
  46.        }  
  47.  
  48.        private void ReplaceButton_Click(object sender, EventArgs e)  
  49.        {  
  50.            try 
  51.            {  
  52.                RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();  
  53.                Regex replaceRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);  
  54.  
  55.                this.ResultsTextBox.ForeColor = Color.Black;  
  56.                this.ResultsTextBox.Text = replaceRegex.Replace(this.InputTextBox.Text, this.ReplacementTextBox.Text);  
  57.                                
  58.            }  
  59.            catch (ArgumentException ex)  
  60.            {  
  61.                this.ResultsTextBox.ForeColor = Color.Red;  
  62.                this.ResultsTextBox.Text = "错误:" + ex.Message;  
  63.            }  
  64.        }  
  65.  
  66.        private void SplitBoutton_Click(object sender, EventArgs e)  
  67.        {  
  68.            try 
  69.            {  
  70.                RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();  
  71.                Regex splitRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);  
  72.  
  73.                String[] splitResults;  
  74.                splitResults = splitRegex.Split(this.InputTextBox.Text);  
  75.                StringBuilder resultsString = new StringBuilder(this.InputTextBox.Text.Length);  
  76.  
  77.                foreach (String stringElement in splitResults)  
  78.                    resultsString.Append(stringElement + Environment.NewLine);  
  79.  
  80.                this.ResultsTextBox.ForeColor = Color.Black;  
  81.                this.ResultsTextBox.Text = resultsString.ToString();  
  82.            }  
  83.            catch (ArgumentException ex)  
  84.            {  
  85.                this.ResultsTextBox.ForeColor = Color.Red;  
  86.                this.ResultsTextBox.Text = "错误:" + ex.Message;  
  87.            }              
  88.  
  89.        }  
  90.  
  91.        private void MatchesButton_Click(object sender, EventArgs e)  
  92.        {  
  93.            try 
  94.            {  
  95.                RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();  
  96.                Regex matchesRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);  
  97.  
  98.                MatchCollection matchesFound;  
  99.                matchesFound = matchesRegex.Matches(this.InputTextBox.Text);  
  100.  
  101.                String nextMath = "------- 下一个匹配项 ---------- ";  
  102.                StringBuilder resultsString = new StringBuilder(64);  
  103.  
  104.                foreach(Match matchMode in matchesFound)  
  105.                    resultsString.Append(matchMode.Value +(Environment.NewLine+nextMath));  
  106.  
  107.                this.ResultsTextBox.ForeColor = Color.Black;  
  108.                this.ResultsTextBox.Text = resultsString.ToString();  
  109.            }  
  110.            catch (ArgumentException ex)  
  111.            {  
  112.                this.ResultsTextBox.ForeColor = Color.Red;  
  113.                this.ResultsTextBox.Text = "错误:" + ex.Message;  
  114.            }              
  115.  
  116.        }  
  117.  
  118.        private void GroupsButton_Click(object sender, EventArgs e)  
  119.        {  
  120.            try 
  121.            {  
  122.                RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();  
  123.                Regex matchesRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);  
  124.  
  125.                MatchCollection matchesFound;  
  126.                matchesFound = matchesRegex.Matches(this.InputTextBox.Text);  
  127.  
  128.                String nextMath = "------- 下一个分组 ---------- ";  
  129.                StringBuilder resultsString = new StringBuilder(64);  
  130.                GroupCollection matchGroups;  
  131.  
  132.  
  133.                foreach (Match matchMode in matchesFound)  
  134.                {  
  135.                    matchGroups = matchMode.Groups;  
  136.                    foreach (Group matchGroup in matchGroups)  
  137.                        resultsString.Append("(" + matchGroup.Value + ")");  
  138.                    resultsString.Append(Environment.NewLine + nextMath);  
  139.                }  
  140.  
  141.                this.ResultsTextBox.ForeColor = Color.Black;  
  142.                this.ResultsTextBox.Text = resultsString.ToString();  
  143.            }  
  144.            catch (ArgumentException ex)  
  145.            {  
  146.                this.ResultsTextBox.ForeColor = Color.Red;  
  147.                this.ResultsTextBox.Text = "错误:" + ex.Message;  
  148.            }             
  149.        }  
  150.  
  151.        //常见正则表达式  
  152.        private void FamiliarRegex_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)  
  153.        {  
  154.            MenuRegex.Show(this,new Point(FamiliarRegex.Location.X, FamiliarRegex.Location.Y + FamiliarRegex.Size.Height));    
  155.            //MessageBox.Show("sdfsd");  
  156.        }  
  157.  
  158.        private void MenuRegexItem_Click(object sender, EventArgs e)  
  159.        {  
  160.            string strRegex = "";  
  161.            switch (((ToolStripMenuItem)sender).Text)  
  162.            {  
  163.                case "整数":  
  164.                    strRegex = @"^((+|-)d)?d*$";  
  165.                    break;  
  166.                case "浮点数":  
  167.                    strRegex = @"^(?:+|-)?d+(?:.d+)?$";  
  168.                    break;  
  169.                case "电话号码":  
  170.                    strRegex = @"d{3}-d{8}|d{4}-d{7}";  
  171.                    break;  
  172.                case "邮政编码":  
  173.                    strRegex = @"[1-9]d{5}(?!d)";  
  174.                    break;  
  175.                case "Email地址1":  
  176.                    strRegex = @"^(([^<>()[]\.,;:@"+'"'+@"  

 
















本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/324335,如需转载请自行联系原作者

相关文章
|
人工智能 机器人 Unix
正则表达式的应用
正则表达式的应用
96 0
|
12月前
正则表达式汇总
正则表达式汇总
44 0
|
前端开发 数据安全/隐私保护 Windows
常用的20个正则表达式
常用的20个正则表达式
297 0
|
C#
正则表达式01
正则表达式01
171 0
正则表达式01
【正则表达式】总结
【正则表达式】总结
99 0
|
Shell Linux Python
正则表达式与运用
正则表达式用的地方是很多的。比如字符串处理过程中。最近遇到记录一下。 1. 比如在shell中 1 #!/bin/bash 2 3 str="date:2017-11-28 os:centos blackbord:blog" 4 5 echo $str | grep centos --colo...
1284 0