其实很早就知道了正则表达式,在集成VBScript脚本的时候,就看到了该功能,不过那时觉得很难,觉得也派不上什么用场,所以也没有过多关注。
最近看了<personname productid="孟岩" w:st="on">孟岩</personname>老师的关于正则表达式讲解,有一种学习正则表达式的冲动,适时我们开发的项目中需要嵌入Python脚本功能,需要一个脚本编辑器,关键字变色等等相关功能用正则表达式实现相对容易的多。
前段时间买了本红皮书《C#字符串和正则表达式参考书》(这真是一本好书,想学习正则表达式的可以参考一下),花了几天的时间把该书看了一遍,正则表达式的用法基本上也弄清楚了,并且对字符串相关的知识也越来越感兴趣了。
对正则表达式的具体规则和使用,实没有什么可说的,网上的文章多的很,都说的比我的好。这是我学习正则表达式做的一个简单正则表达式测试工具,其实大部分代码就是上面书的一个示例(不知道为什么,上网竟没有找到该书的示例源码),又上网查了一些资料,把一些常见的正则表达式也嵌入了进去,方便了正则表达式的应用(以后有时间做一个比较理想的正则表达式工具)。
这是程序的截图:
相关源码:
//获取正则表达式的匹配参数
privateRegexOptionsGetSelectedRegexOptions()
{
RegexOptionsselectedRegexOptions=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;
returnselectedRegexOptions;
}
privatevoidTestRegexButton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegextestRegex=newRegex(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(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
privatevoidReplaceButton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegexreplaceRegex=newRegex(this.RegexTextBox.Text,selectedRegexOptions);
this.ResultsTextBox.ForeColor=Color.Black;
this.ResultsTextBox.Text=replaceRegex.Replace(this.InputTextBox.Text,this.ReplacementTextBox.Text);
}
catch(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
privatevoidSplitBoutton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegexsplitRegex=newRegex(this.RegexTextBox.Text,selectedRegexOptions);
String[]splitResults;
splitResults=splitRegex.Split(this.InputTextBox.Text);
StringBuilderresultsString=newStringBuilder(this.InputTextBox.Text.Length);
foreach(StringstringElementinsplitResults)
resultsString.Append(stringElement+Environment.NewLine);
this.ResultsTextBox.ForeColor=Color.Black;
this.ResultsTextBox.Text=resultsString.ToString();
}
catch(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
privatevoidMatchesButton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegexmatchesRegex=newRegex(this.RegexTextBox.Text,selectedRegexOptions);
MatchCollectionmatchesFound;
matchesFound=matchesRegex.Matches(this.InputTextBox.Text);
StringnextMath="-------下一个匹配项---------- ";
StringBuilderresultsString=newStringBuilder(64);
foreach(MatchmatchModeinmatchesFound)
resultsString.Append(matchMode.Value+(Environment.NewLine+nextMath));
this.ResultsTextBox.ForeColor=Color.Black;
this.ResultsTextBox.Text=resultsString.ToString();
}
catch(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
privatevoidGroupsButton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegexmatchesRegex=newRegex(this.RegexTextBox.Text,selectedRegexOptions);
MatchCollectionmatchesFound;
matchesFound=matchesRegex.Matches(this.InputTextBox.Text);
StringnextMath="-------下一个分组---------- ";
StringBuilderresultsString=newStringBuilder(64);
GroupCollectionmatchGroups;
foreach(MatchmatchModeinmatchesFound)
{
matchGroups=matchMode.Groups;
foreach(GroupmatchGroupinmatchGroups)
resultsString.Append("("+matchGroup.Value+")");
resultsString.Append(Environment.NewLine+nextMath);
}
this.ResultsTextBox.ForeColor=Color.Black;
this.ResultsTextBox.Text=resultsString.ToString();
}
catch(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
//常见正则表达式
privatevoidFamiliarRegex_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse)
{
MenuRegex.Show(this,newPoint(FamiliarRegex.Location.X,FamiliarRegex.Location.Y+FamiliarRegex.Size.Height));
//MessageBox.Show("sdfsd");
}
privatevoidMenuRegexItem_Click(objectsender,EventArgse)
{
stringstrRegex="";
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=@"^(([^<>()[]/.,;:@"+'"'+@"
privateRegexOptionsGetSelectedRegexOptions()
{
RegexOptionsselectedRegexOptions=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;
returnselectedRegexOptions;
}
privatevoidTestRegexButton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegextestRegex=newRegex(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(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
privatevoidReplaceButton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegexreplaceRegex=newRegex(this.RegexTextBox.Text,selectedRegexOptions);
this.ResultsTextBox.ForeColor=Color.Black;
this.ResultsTextBox.Text=replaceRegex.Replace(this.InputTextBox.Text,this.ReplacementTextBox.Text);
}
catch(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
privatevoidSplitBoutton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegexsplitRegex=newRegex(this.RegexTextBox.Text,selectedRegexOptions);
String[]splitResults;
splitResults=splitRegex.Split(this.InputTextBox.Text);
StringBuilderresultsString=newStringBuilder(this.InputTextBox.Text.Length);
foreach(StringstringElementinsplitResults)
resultsString.Append(stringElement+Environment.NewLine);
this.ResultsTextBox.ForeColor=Color.Black;
this.ResultsTextBox.Text=resultsString.ToString();
}
catch(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
privatevoidMatchesButton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegexmatchesRegex=newRegex(this.RegexTextBox.Text,selectedRegexOptions);
MatchCollectionmatchesFound;
matchesFound=matchesRegex.Matches(this.InputTextBox.Text);
StringnextMath="-------下一个匹配项---------- ";
StringBuilderresultsString=newStringBuilder(64);
foreach(MatchmatchModeinmatchesFound)
resultsString.Append(matchMode.Value+(Environment.NewLine+nextMath));
this.ResultsTextBox.ForeColor=Color.Black;
this.ResultsTextBox.Text=resultsString.ToString();
}
catch(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
privatevoidGroupsButton_Click(objectsender,EventArgse)
{
try
{
RegexOptionsselectedRegexOptions=this.GetSelectedRegexOptions();
RegexmatchesRegex=newRegex(this.RegexTextBox.Text,selectedRegexOptions);
MatchCollectionmatchesFound;
matchesFound=matchesRegex.Matches(this.InputTextBox.Text);
StringnextMath="-------下一个分组---------- ";
StringBuilderresultsString=newStringBuilder(64);
GroupCollectionmatchGroups;
foreach(MatchmatchModeinmatchesFound)
{
matchGroups=matchMode.Groups;
foreach(GroupmatchGroupinmatchGroups)
resultsString.Append("("+matchGroup.Value+")");
resultsString.Append(Environment.NewLine+nextMath);
}
this.ResultsTextBox.ForeColor=Color.Black;
this.ResultsTextBox.Text=resultsString.ToString();
}
catch(ArgumentExceptionex)
{
this.ResultsTextBox.ForeColor=Color.Red;
this.ResultsTextBox.Text="错误:"+ex.Message;
}
}
//常见正则表达式
privatevoidFamiliarRegex_LinkClicked(objectsender,LinkLabelLinkClickedEventArgse)
{
MenuRegex.Show(this,newPoint(FamiliarRegex.Location.X,FamiliarRegex.Location.Y+FamiliarRegex.Size.Height));
//MessageBox.Show("sdfsd");
}
privatevoidMenuRegexItem_Click(objectsender,EventArgse)
{
stringstrRegex="";
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=@"^(([^<>()[]/.,;:@"+'"'+@"
下载地址:http://download.csdn.net/source/162304