其实很早就知道了正则表达式,在集成VBScript脚本的时候,就看到了该功能,不过那时觉得很难,觉得也派不上什么用场,所以也没有过多关注。
最近看了孟岩老师的关于正则表达式讲解,有一种学习正则表达式的冲动,适时我们开发的项目中需要嵌入Python脚本功能,需要一个脚本编辑器,关键字变色等等相关功能用正则表达式实现相对容易的多。
前段时间买了本红皮书《C#字符串和正则表达式参考书》(这真是一本好书,想学习正则表达式的可以参考一下),花了几天的时间把该书看了一遍,正则表达式的用法基本上也弄清楚了,并且对字符串相关的知识也越来越感兴趣了。
对正则表达式的具体规则和使用,实没有什么可说的,网上的文章多的很,都说的比我的好。这是我学习正则表达式做的一个简单正则表达式测试工具,其实大部分代码就是上面书的一个示例(不知道为什么,上网竟没有找到该书的示例源码),又上网查了一些资料,把一些常见的正则表达式也嵌入了进去,方便了正则表达式的应用(以后有时间做一个比较理想的正则表达式工具)。
这是程序的截图:
相关源码:
- //获取正则表达式的匹配参数
- private RegexOptions GetSelectedRegexOptions()
- {
- RegexOptions selectedRegexOptions = RegexOptions.None;
- if (this.IgnoreCaseChkBox.Checked)
- selectedRegexOptions |= RegexOptions.IgnoreCase;
- if (this.ExplicitCaptureChkBox.Checked)
- selectedRegexOptions |= RegexOptions.ExplicitCapture;
- if (this.ECMAScriptChkBox.Checked)
- selectedRegexOptions |= RegexOptions.ECMAScript;
- if (this.IgnoreCaseChkBox.Checked)
- selectedRegexOptions |= RegexOptions.IgnoreCase;
- if (this.MultiLineChkBox.Checked)
- selectedRegexOptions |= RegexOptions.Multiline;
- if (this.RightToLeftChkBox.Checked)
- selectedRegexOptions |= RegexOptions.RightToLeft;
- if (this.SingeLineChkBox.Checked)
- selectedRegexOptions |= RegexOptions.Singleline;
- return selectedRegexOptions;
- }
- private void TestRegexButton_Click(object sender, EventArgs e)
- {
- try
- {
- RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();
- Regex testRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);
- if (testRegex.IsMatch(this.InputTextBox.Text))
- {
- this.ResultsTextBox.ForeColor = Color.Black;
- this.ResultsTextBox.Text = "匹配成功";
- }
- else
- {
- this.ResultsTextBox.ForeColor = Color.Red;
- this.ResultsTextBox.Text = "匹配失败";
- }
- }
- catch (ArgumentException ex)
- {
- this.ResultsTextBox.ForeColor = Color.Red;
- this.ResultsTextBox.Text = "错误:"+ex.Message;
- }
- }
- private void ReplaceButton_Click(object sender, EventArgs e)
- {
- try
- {
- RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();
- Regex replaceRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);
- this.ResultsTextBox.ForeColor = Color.Black;
- this.ResultsTextBox.Text = replaceRegex.Replace(this.InputTextBox.Text, this.ReplacementTextBox.Text);
- }
- catch (ArgumentException ex)
- {
- this.ResultsTextBox.ForeColor = Color.Red;
- this.ResultsTextBox.Text = "错误:" + ex.Message;
- }
- }
- private void SplitBoutton_Click(object sender, EventArgs e)
- {
- try
- {
- RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();
- Regex splitRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);
- String[] splitResults;
- splitResults = splitRegex.Split(this.InputTextBox.Text);
- StringBuilder resultsString = new StringBuilder(this.InputTextBox.Text.Length);
- foreach (String stringElement in splitResults)
- resultsString.Append(stringElement + Environment.NewLine);
- this.ResultsTextBox.ForeColor = Color.Black;
- this.ResultsTextBox.Text = resultsString.ToString();
- }
- catch (ArgumentException ex)
- {
- this.ResultsTextBox.ForeColor = Color.Red;
- this.ResultsTextBox.Text = "错误:" + ex.Message;
- }
- }
- private void MatchesButton_Click(object sender, EventArgs e)
- {
- try
- {
- RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();
- Regex matchesRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);
- MatchCollection matchesFound;
- matchesFound = matchesRegex.Matches(this.InputTextBox.Text);
- String nextMath = "------- 下一个匹配项 ---------- ";
- StringBuilder resultsString = new StringBuilder(64);
- foreach(Match matchMode in matchesFound)
- resultsString.Append(matchMode.Value +(Environment.NewLine+nextMath));
- this.ResultsTextBox.ForeColor = Color.Black;
- this.ResultsTextBox.Text = resultsString.ToString();
- }
- catch (ArgumentException ex)
- {
- this.ResultsTextBox.ForeColor = Color.Red;
- this.ResultsTextBox.Text = "错误:" + ex.Message;
- }
- }
- private void GroupsButton_Click(object sender, EventArgs e)
- {
- try
- {
- RegexOptions selectedRegexOptions = this.GetSelectedRegexOptions();
- Regex matchesRegex = new Regex(this.RegexTextBox.Text, selectedRegexOptions);
- MatchCollection matchesFound;
- matchesFound = matchesRegex.Matches(this.InputTextBox.Text);
- String nextMath = "------- 下一个分组 ---------- ";
- StringBuilder resultsString = new StringBuilder(64);
- GroupCollection matchGroups;
- foreach (Match matchMode in matchesFound)
- {
- matchGroups = matchMode.Groups;
- foreach (Group matchGroup in matchGroups)
- resultsString.Append("(" + matchGroup.Value + ")");
- resultsString.Append(Environment.NewLine + nextMath);
- }
- this.ResultsTextBox.ForeColor = Color.Black;
- this.ResultsTextBox.Text = resultsString.ToString();
- }
- catch (ArgumentException ex)
- {
- this.ResultsTextBox.ForeColor = Color.Red;
- this.ResultsTextBox.Text = "错误:" + ex.Message;
- }
- }
- //常见正则表达式
- private void FamiliarRegex_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
- {
- MenuRegex.Show(this,new Point(FamiliarRegex.Location.X, FamiliarRegex.Location.Y + FamiliarRegex.Size.Height));
- //MessageBox.Show("sdfsd");
- }
- private void MenuRegexItem_Click(object sender, EventArgs e)
- {
- string strRegex = "";
- switch (((ToolStripMenuItem)sender).Text)
- {
- case "整数":
- strRegex = @"^((+|-)d)?d*$";
- break;
- case "浮点数":
- strRegex = @"^(?:+|-)?d+(?:.d+)?$";
- break;
- case "电话号码":
- strRegex = @"d{3}-d{8}|d{4}-d{7}";
- break;
- case "邮政编码":
- strRegex = @"[1-9]d{5}(?!d)";
- break;
- case "Email地址1":
- strRegex = @"^(([^<>()[]\.,;:@"+'"'+@"
本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/324335,如需转载请自行联系原作者