利用C#快速地编写属于自己的正则表达式测试小工具

介绍了一款基于.NET开发的正则表达式测试工具,该工具不仅能够检测正则表达式的正确性,还能显示匹配项的位置信息并生成XML结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中,经常要用到正则表达式来匹配具有一定规则的字符串。有时候需要检查我们编写的正则表达式是否正确,能否匹配目标字符串,这时我们可能需要一个正则表达式匹配检测的工具了。

 

使用 .Net 可以非常方便地编写这样的一个小工具,简短的几百行代码,就可以非常方便地用来检测正则表达式是否匹配,即是否正确。

 

核心代码甚至只有几行:

 

 

 

不过,做这个小工具的过程中,考虑到实用性,还为它添加上了指出目标字符串中是含有的所有匹配及其位置、生成可用于复制的 xml 的匹配结果等功能。

 

其运行界面如下图所示:

运行界面2

 

当匹配了正则表达式时:

运行界面1

 

为了方便经常调用,我们可以把它添加进 visual studio 的外部工具列表中,在需要时,很方便就能够调用。

如下图所示:
在 VS 中添加正则表达式测试小工具

 

 

 

如果需要此工具,请点击这里下载:
RegexTestTool.rar (10.02 kb)

 

如果需要此工具的源代码,请点击这里下载:

RegexTestTool_Src.rar (295.08 kb)

此源代码包含的技术包括:正则表达式、内存数据源、xml 数据处理、窗体界面设计知识及其他常用技巧,值得参考。

本文版权:陈计节

欢迎转载,请注明出处。

欢迎访问本文位于 ciznx.com 的原地址:http://www.ciznx.com/post/buildyourownregularexpresstiontesttool.aspx

C#制作简单正则表达式测试器部分代码: namespace RegexTest { public partial class Rt : Form { public Rt() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; } private void btnPi_Click(object sender, EventArgs e) { if (regText.Text.Trim() != "") { ParameterizedThreadStart ts = new ParameterizedThreadStart(P); Thread th = new Thread(ts); th.Start(th); this.btnPi.Enabled = false; this.process.Visible = true; } else { ParameterizedThreadStart ts = new ParameterizedThreadStart(ShowMsg); Thread th = new Thread(ts); th.Start(th); } } public void ShowMsg(Object obj) { Thread th = (Thread)obj; for (var i = 0; i < 10; i++) { if (i % 2 == 0) { label2.ForeColor = Color.Red; } else { label2.ForeColor = Color.Black; } Thread.Sleep(100); } label2.ForeColor = Color.Red; th.Abort(); } public void P(object o) { Thread t = (Thread)o; resultText.Clear(); String regText = this.regText.Text; String sourceText = this.sourceText.Text; Regex regex = new Regex(regText, RegexOptions.IgnoreCase); MatchCollection matches = regex.Matches(sourceText); this.resultText.Text += "匹配结果数:" + matches.Count + "\n"; this.resultText.Text += "-----------------------------------------------------\n"; foreach (Match match in matches) { this.resultText.Text += "匹配值:" + match.Value + "\n"; this.resultText.Text += "匹配组结果:\n"; foreach (String g in regex.GetGroupNames()) { this.resultText.Text += "组(" + g + "):" + match.Groups[g].Value + "\n"; } resultText.Text += "-----------------------------------------------------\n"; } this.process.Visible = false; this.btnPi.Enabled = true; t.Abort(); } private void btnReplace_Click(object sender, EventArgs e) { resultText.Clear(); String regText = this.regText.Text; String replaceText = this.replaceText.Text; String sourceText = this.sourceText.Text; Regex regex = new Regex(regText); this.resultText.Text += "替换结果:\n"; this.resultText.Text += "-----------------------------------------------------\n"; this.resultText.Text += regex.Replace(sourceText,replaceText); } private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) { if (this.sourceText.SelectedText.Length > 0) { Clipboard.SetText(this.sourceText.SelectedText); MessageBox.Show("已成功将选中文本复制到剪切板"); } else { Clipboard.SetText(this.sourceText.Text); MessageBox.Show("已成功将文本复制到剪切板"); } } private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e) { this.sourceText.Paste(DataFormats.GetFormat("text")); } private void 清空ToolStripMenuItem_Click(object sender, EventArgs e) { this.sourceText.Clear(); } private void toolStripMenuItem1_Click(object sender, EventArgs e) { if (resultText.SelectedText.Length > 0) { Clipboard.SetText(this.resultText.SelectedText); MessageBox.Show("已成功将选中文本复制到剪切板"); } else { Clipboard.SetText(this.resultText.Text); MessageBox.Show("已成功将结果复制到剪切板"); } } private void toolStripMenuItem3_Click(object sender, EventArgs e) { this.resultText.Clear(); } private void Form1_Load(object sender, EventArgs e) { } private void resultText_TextChanged(object sender, EventArgs e) { //this.resultText. } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值