也谈正则表达式

简介:

其实很早就知道了正则表达式,在集成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,如需转载请自行联系原作者

相关文章
|
Linux
QT桌面(实现界面的滑动切换)
QT桌面(实现界面的滑动切换)
610 1
|
9月前
|
人工智能 自然语言处理 算法
DeepSeek大模型在客服系统中的应用场景解析
在数字化浪潮下,客户服务领域正经历深刻变革,AI技术成为提升服务效能与体验的关键。DeepSeek大模型凭借自然语言处理、语音交互及多模态技术,显著优化客服流程,提升用户满意度。它通过智能问答、多轮对话引导、多模态语音客服和情绪监测等功能,革新服务模式,实现高效应答与精准分析,推动人机协作,为企业和客户创造更大价值。
810 5
|
11月前
|
关系型数据库 MySQL API
新手教程:数据库操作(使用PDO或MySQLi扩展)
本文为新手介绍如何使用PDO和MySQLi扩展连接与操作MySQL数据库。PDO更现代灵活,支持多种数据库,适合大多数应用;MySQLi提供面向过程和面向对象两种API,适合直接控制数据库操作。教程涵盖安装配置、创建连接、执行查询(查询、插入、更新、删除)及错误处理等内容。希望这篇教程能帮助你快速上手PHP中的数据库操作!
354 32
|
数据采集 机器学习/深度学习 人工智能
AI在医疗诊断中的应用与挑战
随着人工智能(AI)技术的飞速发展,其在医疗领域的应用也日益广泛。从辅助医生进行疾病诊断到提供个性化治疗方案,AI技术正在改变着传统医疗模式。然而,AI在医疗诊断中的应用并非一帆风顺,面临着数据质量、模型可解释性、法规政策等一系列挑战。本文将从AI在医疗诊断中的具体应用场景出发,探讨其面临的主要挑战及未来发展趋势。
389 13
|
11月前
|
数据挖掘
优化现金流:CRM回款自动化的关键步骤
在当今商业环境中,CRM系统已成为企业与客户互动的核心平台。回款自动化作为其重要功能,通过集成支付平台、自动化发票生成、智能提醒和数据分析等手段,显著减少人工操作错误,加快资金周转,提升现金流管理能力,降低成本并增强客户满意度。这不仅提高了企业的财务效率,还增强了市场竞争力。企业应积极拥抱这一变革,优化CRM系统,实现财务管理的智能化,从而在竞争中占据有利地位。
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
419 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
Ubuntu 文件存储 数据安全/隐私保护
电视盒子部署云相册
【10月更文挑战第2天】 利用电视盒子实现个人云相册,完成手机相册瘦身,以及数据安全保存,最小成本实现个人云部署
685 1
|
编解码 前端开发 JavaScript
未登录也能知道你是谁?浏览器指纹了解一下!
未登录也能知道你是谁?浏览器指纹了解一下!
401 0
|
前端开发 JavaScript UED
只会用插件可不行,这些前端动画技术同样值得收藏-CSS篇
只会用插件可不行,这些前端动画技术同样值得收藏-CSS篇
350 0
|
存储 前端开发 Java
Spring IoC&DI(3)—DI详解
Spring IoC&DI(3)—DI详解
277 0