在线用户    站点地图 技术论坛 文档中心 站点导航 资源下载 语言参考 教程专题 站点统计 业务项目 使用帮助
您的位置
MSDN参考新加了CSS2参考,全中文,制作精良。245k下载。           新加了sxf_sxf推荐的"动态网页专家指导" 下载!          新加了lsg2002lsg推荐的"ASP.NET高级编程(PDF)" 下载!          新加了DHTML代码预览!!,功能强大哦!欢迎试用          新加了网友lincong为大家提供的SQL Server 2000 程序员指南,有点大,但同时也就说明内容全咯!           新加了网友ibra为大家提供的北大的JAVA课件,很适合初学者入门           新加了一个java的连接缓冲池代码示例           新加了人月神话电子版下载!软件工程巨著哦~~           更新了评分标准,引入了“专家分”概念,相信可以更好的激励大家的学习!详情请看“使用帮助”           新加了由网友GGG提供的“IIS超级管理手册”,值得一看哦!(虽然我没看过 :P )           新加了“英雄榜”,欢迎测试!           “无组件上传·从原理剖析到实践”已经全部完成,源码全部开放,有兴趣的朋友请到文档中心一探究竟。  您的位置  首页>文档中心>ASP.net>文档A0000776 在同一窗口中打开页面中的链接 在新窗口中打开页面中的链接 将ASPCHINA设为首页 将ASPCHINA加入书签    
 LOGIN HERE
用户:
密码: 忘记密码
记住密码 用户注册 游客进入
相关文章

[perl]理解贪婪匹配和最小匹配之间的区别

转换<...>外的空格为&nbsp;

利用java读取网页模板代码然后用正则表达式替换更改内容

ASP和VBS的关键字首字母大写

用递归来转换嵌套的UBB代码

认识正则表达式

Asp正则表达式在UBB论坛中的应用

UBB定义!
发表文章
有了这个正则表达式全搞定

原作者:silverduck(原作)     提交人:q     发布时间:04-06-01     文章类型:转贴     浏览量:3669
参考链结:http://    
关键字:regexp|正则|一般表达式
[本文档没有附件]
字体:    视力保护色: 杏仁黄  秋叶褐  胭脂红  芥末绿  天蓝  雪青  灰  银河白(默认色) [A0000776]

上一段时间由于对正则表达式用的比较多,因此:看了很多书,找了很多的资料,有了这个正则表达式就很容易理解了。熟悉vs.net的朋友只要一运行代码,编译成软件,对于初学正则表达式的很有帮助,对于高手来测试是非常凑手的工具!

正则表达式的全面模式匹配表示法可以使我们快速地分析大量的文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字符串添加到集合以生成报告。

如果你对正则表达式还不了解,你可以看看以前发表的文章,有许多关于正则表达式入门的文章,本文不对正则表达式的使用进行介绍。本文主要给出了我自己做的一个正则表达式的测试例子,测试.net下的正则表达式。

由于我前一段时间总和正则表达式打交道,参考了不少前面的文章,也从网友的那里解决了不少问题,所以向回报一下大家。和写完一个程序我们总要测试一下一样,每写一个正则表达式我也总是要测试以下它的正确性,使用VS的单步跟踪能力可以对自己写的式子逐个测试,可是效率太低。于是自己就写了一个测试程序(使用C#开发,VS2003)暂时定名为RegexTester,下面是界面的一个截图:

界面参考了一本书上的一个例子,是不是还比较容易理解。

/* 程序名  : RegexTester
* 用途  : .net下的正则表达式测试程序
*  文件名  :  frmRegexTester.cs
* 作者  : silverduck
* 日期  : 04/05/2004
* e-Mail  : silverduck@eyou.com
*/

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Text.RegularExpressions;
namespace RegexTester
{
///
/// 测试程序窗体
///
public class frmRegexTester : System.Windows.Forms.Form
{
  private System.Windows.Forms.Button btnOpenPtn;
  private System.Windows.Forms.Label label5;
  private System.Windows.Forms.TextBox txtPattern;
  private System.Windows.Forms.GroupBox grpRegOption;
  private System.Windows.Forms.OpenFileDialog dlgOpen;
  private System.Windows.Forms.SaveFileDialog dlgSave;
  private System.Windows.Forms.CheckBox chkIgnoreCase;
  private System.Windows.Forms.CheckBox chkECMAScript;
  private System.Windows.Forms.CheckBox chkMultiline;
  private System.Windows.Forms.CheckBox chkSingleline;
  private System.Windows.Forms.CheckBox chkIgnorePatternWhitespace;
  private System.Windows.Forms.CheckBox chkCultureInvariant;
  private System.Windows.Forms.CheckBox chkRightToLeft;
  private System.Windows.Forms.CheckBox chkCompiled;
  private System.Windows.Forms.CheckBox chkExplicitCapture;
  private System.Windows.Forms.Label label6;
  private System.Windows.Forms.TextBox txtTest;
  private System.Windows.Forms.Panel pnlTest;
  private System.Windows.Forms.Panel pnlResultTv;
  private System.Windows.Forms.TreeView tvMatch;
  private System.Windows.Forms.Label label1;
  private System.Windows.Forms.GroupBox groupBox1;
  private System.Windows.Forms.Button btnSavePtn;
  private System.Windows.Forms.Button btnOpenInput;
  private System.Windows.Forms.Button btnExpand;
  private System.Windows.Forms.Button btnIsMatch;
  private System.Windows.Forms.Button btnMatch;
  private System.Windows.Forms.Button btnSplit;
  private System.Windows.Forms.Button btnReplace;
  private System.Windows.Forms.Button btnMatches;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.TextBox txtResult;
  private System.Windows.Forms.Panel pnlResultTxt;
  private System.Windows.Forms.TextBox txtReplacement;
  private System.Windows.Forms.Button btnSaveResult;
  ///
  /// 必需的设计器变量。
  ///
  private System.ComponentModel.Container components = null;
  public frmRegexTester()
  {
 
  InitializeComponent();
 
  }
  ///
  /// 清理所有正在使用的资源。
  ///
  protected override void Dispose( bool disposing )
  {
  if( disposing )
  {
    if (components != null)
    {
    components.Dispose();
    }
  }
  base.Dispose( disposing );
  }
  #region Windows 窗体设计器生成的代码
  ///
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  ///
  private void InitializeComponent()
  {
  this.btnSavePtn = new System.Windows.Forms.Button();
  this.btnOpenPtn = new System.Windows.Forms.Button();
  this.label5 = new System.Windows.Forms.Label();
  this.btnIsMatch = new System.Windows.Forms.Button();
  this.txtPattern = new System.Windows.Forms.TextBox();
  this.grpRegOption = new System.Windows.Forms.GroupBox();
  this.chkIgnorePatternWhitespace = new System.Windows.Forms.CheckBox();
  this.chkCultureInvariant = new System.Windows.Forms.CheckBox();
  this.chkRightToLeft = new System.Windows.Forms.CheckBox();
  this.chkCompiled = new System.Windows.Forms.CheckBox();
  this.chkSingleline = new System.Windows.Forms.CheckBox();
  this.chkMultiline = new System.Windows.Forms.CheckBox();
  this.chkExplicitCapture = new System.Windows.Forms.CheckBox();
  this.chkECMAScript = new System.Windows.Forms.CheckBox();
  this.chkIgnoreCase = new System.Windows.Forms.CheckBox();
  this.dlgOpen = new System.Windows.Forms.OpenFileDialog();
  this.dlgSave = new System.Windows.Forms.SaveFileDialog();
  this.pnlTest = new System.Windows.Forms.Panel();
  this.btnOpenInput = new System.Windows.Forms.Button();
  this.label6 = new System.Windows.Forms.Label();
  this.txtTest = new System.Windows.Forms.TextBox();
  this.pnlResultTv = new System.Windows.Forms.Panel();
  this.btnExpand = new System.Windows.Forms.Button();
  this.label1 = new System.Windows.Forms.Label();
  this.tvMatch = new System.Windows.Forms.TreeView();
  this.btnMatch = new System.Windows.Forms.Button();
  this.btnSplit = new System.Windows.Forms.Button();
  this.btnReplace = new System.Windows.Forms.Button();
  this.btnMatches = new System.Windows.Forms.Button();
  this.groupBox1 = new System.Windows.Forms.GroupBox();
  this.txtReplacement = new System.Windows.Forms.TextBox();
  this.pnlResultTxt = new System.Windows.Forms.Panel();
  this.btnSaveResult = new System.Windows.Forms.Button();
  this.txtResult = new System.Windows.Forms.TextBox();
  this.label2 = new System.Windows.Forms.Label();
  this.grpRegOption.SuspendLayout();
  this.pnlTest.SuspendLayout();
  this.pnlResultTv.SuspendLayout();
  this.groupBox1.SuspendLayout();
  this.pnlResultTxt.SuspendLayout();
  this.SuspendLayout();
  //
  // btnSavePtn
  //
  this.btnSavePtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
  this.btnSavePtn.Location = new System.Drawing.Point(584, 8);
  this.btnSavePtn.Name = "btnSavePtn";
  this.btnSavePtn.Size = new System.Drawing.Size(88, 23);
  this.btnSavePtn.TabIndex = 2;
  this.btnSavePtn.Text = "保存匹配模式";
  this.btnSavePtn.Click += new System.EventHandler(this.btnSavePtn_Click);
  //
  // btnOpenPtn
  //
  this.btnOpenPtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
  this.btnOpenPtn.Location = new System.Drawing.Point(456, 8);
  this.btnOpenPtn.Name = "btnOpenPtn";
  this.btnOpenPtn.Size = new System.Drawing.Size(96, 23);
  this.btnOpenPtn.TabIndex = 1;
  this.btnOpenPtn.Text = "从文件导入(&P)";
  this.btnOpenPtn.Click += new System.EventHandler(this.btnOpenPtn_Click);
  //
  // label5
  //
  this.label5.Location = new System.Drawing.Point(8, 8);
  this.label5.Name = "label5";
  this.label5.Size = new System.Drawing.Size(112, 16);
  this.label5.TabIndex = 0;
  this.label5.Text = "Pattern模式字符串";
  //
  // btnIsMatch
  //
  this.btnIsMatch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
  this.btnIsMatch.Location = new System.Drawing.Point(241, 648);
  this.btnIsMatch.Name = "btnIsMatch";
  this.btnIsMatch.TabIndex = 7;
  this.btnIsMatch.Text = "IsMatch(&I)";
  this.btnIsMatch.Click += new System.EventHandler(this.btnIsMatch_Click);
  //
  // txtPattern
  //
  this.txtPattern.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
    | System.Windows.Forms.AnchorStyles.Right)));
  this.txtPattern.Location = new System.Drawing.Point(8, 32);
  this.txtPattern.MaxLength = 32767000;
  this.txtPattern.Multiline = true;
  this.txtPattern.Name = "txtPattern";
  this.txtPattern.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
  this.txtPattern.Size = new System.Drawing.Size(672, 56);
  this.txtPattern.TabIndex = 3;
  this.txtPattern.Text = "";
  //
  // grpRegOption
  //
  this.grpRegOption.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
    | System.Windows.Forms.AnchorStyles.Right)));
  this.grpRegOption.Controls.Add(this.chkIgnorePatternWhitespace);
  this.grpRegOption.Controls.Add(this.chkCultureInvariant);
  this.grpRegOption.Controls.Add(this.chkRightToLeft);
  this.grpRegOption.Controls.Add(this.chkCompiled);
  this.grpRegOption.Controls.Add(this.chkSingleline);
  this.grpRegOption.Controls.Add(this.chkMultiline);
  this.grpRegOption.Controls.Add(this.chkExplicitCapture);
  this.grpRegOption.Controls.Add(this.chkECMAScript);
  this.grpRegOption.Controls.Add(this.chkIgnoreCase);
  this.grpRegOption.Location = new System.Drawing.Point(8, 88);
  this.grpRegOption.Name = "grpRegOption";
  this.grpRegOption.Size = new System.Drawing.Size(672, 66);
  this.grpRegOption.TabIndex = 4;
  this.grpRegOption.TabStop = false;
  this.grpRegOption.Text = "RegexOptions(正则表达式选项)";
  //
  // chkIgnorePatternWhitespace
  //
  this.chkIgnorePatternWhitespace.Checked = true;
  this.chkIgnorePatternWhitespace.CheckState = System.Windows.Forms.CheckState.Checked;
  this.chkIgnorePatternWhitespace.Location = new System.Drawing.Point(400, 40);
  this.chkIgnorePatternWhitespace.Name = "chkIgnorePatternWhitespace";
  this.chkIgnorePatternWhitespace.Size = new System.Drawing.Size(168, 24);
  this.chkIgnorePatternWhitespace.TabIndex = 8;
  this.chkIgnorePatternWhitespace.Text = "IgnorePatternWhitespace";
  //
  // chkCultureInvariant
  //
  this.chkCultureInvariant.Location = new System.Drawing.Point(272, 40);
  this.chkCultureInvariant.Name = "chkCultureInvariant";
  this.chkCultureInvariant.Size = new System.Drawing.Size(128, 24);
  this.chkCultureInvariant.TabIndex = 7;
  this.chkCultureInvariant.Text = "CultureInvariant";
  //
  // chkRightToLeft
  //
  this.chkRightToLeft.Location = new System.Drawing.Point(144, 40);
  this.chkRightToLeft.Name = "chkRightToLeft";
  this.chkRightToLeft.Size = new System.Drawing.Size(120, 24);
  this.chkRightToLeft.TabIndex = 6;
  this.chkRightToLeft.Text = "RightToLeft";
  //
  // chkCompiled
  //
  this.chkCompiled.Location = new System.Drawing.Point(16, 40);
  this.chkCompiled.Name = "chkCompiled";
  this.chkCompiled.TabIndex = 5;
  this.chkCompiled.Text = "Compiled ";
  //
  // chkSingleline
  //
  this.chkSingleline.Location = new System.Drawing.Point(400, 16);
  this.chkSingleline.Name = "chkSingleline";
  this.chkSingleline.Size = new System.Drawing.Size(120, 24);
  this.chkSingleline.TabIndex = 3;
  this.chkSingleline.Text = "Singleline";
  //
  // chkMultiline
  //
  this.chkMultiline.Location = new System.Drawing.Point(272, 16);
  this.chkMultiline.Name = "chkMultiline";
  this.chkMultiline.Size = new System.Drawing.Size(120, 24);
  this.chkMultiline.TabIndex = 2;
  this.chkMultiline.Text = "Multiline";
  //
  // chkExplicitCapture
  //
  this.chkExplicitCapture.Location = new System.Drawing.Point(144, 16);
  this.chkExplicitCapture.Name = "chkExplicitCapture";
  this.chkExplicitCapture.Size = new System.Drawing.Size(120, 24);
  this.chkExplicitCapture.TabIndex = 1;
  this.chkExplicitCapture.Text = "ExplicitCapture";
  //
  // chkECMAScript
  //
  this.chkECMAScript.Location = new System.Drawing.Point(528, 16);
  this.chkECMAScript.Name = "chkECMAScript";
  this.chkECMAScript.Size = new System.Drawing.Size(88, 24);
  this.chkECMAScript.TabIndex = 4;
  this.chkECMAScript.Text = "ECMAScript";
  //
  // chkIgnoreCase
  //
  this.chkIgnoreCase.Checked = true;
  this.chkIgnoreCase.CheckState = System.Windows.Forms.CheckState.Checked;
  this.chkIgnoreCase.Location = new System.Drawing.Point(16, 16);
  this.chkIgnoreCase.Name = "chkIgnoreCase";
  this.chkIgnoreCase.Size = new System.Drawing.Size(120, 24);
  this.chkIgnoreCase.TabIndex = 0;
  this.chkIgnoreCase.Text = "IgnoreCase";
  //
  // pnlTest
  //
  this.pnlTest.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
    | System.Windows.Forms.AnchorStyles.Right)));
  this.pnlTest.Controls.Add(this.btnOpenInput);
  this.pnlTest.Controls.Add(this.label6);
  this.pnlTest.Controls.Add(this.txtTest);
  this.pnlTest.Location = new System.Drawing.Point(8, 161);
  this.pnlTest.Name = "pnlTest";
  this.pnlTest.Size = new System.Drawing.Size(672, 247);
  this.pnlTest.TabIndex = 9;
  //
  // btnOpenInput
  //
  this.btnOpenInput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
  this.btnOpenInput.Location = new System.Drawing.Point(553, 4);
  this.btnOpenInput.Name = "btnOpenInput";
  this.btnOpenInput.Size = new System.Drawing.Size(96, 23);
  this.btnOpenInput.TabIndex = 9;
  this.btnOpenInput.Text = "从文件导入(&F)";
  this.btnOpenInput.Click += new System.EventHandler(this.btnOpenInput_Click);
  //
  // label6
  //
  this.label6.Location = new System.Drawing.Point(8, 8);
  this.label6.Name = "label6";
  this.label6.Size = new System.Drawing.Size(80, 16);
  this.label6.TabIndex = 7;
  this.label6.Text = "测试字符串";
  //
  // txtTest
  //
  this.txtTest.Dock = System.Windows.Forms.DockStyle.Bottom;
  this.txtTest.Location = new System.Drawing.Point(0, 31);
  this.txtTest.Multiline = true;
  this.txtTest.Name = "txtTest";
  this.txtTest.ScrollBars = System.Windows.Forms.ScrollBars.Both;
  this.txtTest.Size = new System.Drawing.Size(672, 216);
  this.txtTest.TabIndex = 8;
  this.txtTest.Text = "";
  //
  // pnlResultTv
  //
  this.pnlResultTv.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    | System.Windows.Forms.AnchorStyles.Left)
    | System.Windows.Forms.AnchorStyles.Right)));
  this.pnlResultTv.Controls.Add(this.btnExpand);
  this.pnlResultTv.Controls.Add(this.label1);
  this.pnlResultTv.Controls.Add(this.tvMatch);
  this.pnlResultTv.Location = new System.Drawing.Point(8, 472);
  this.pnlResultTv.Name = "pnlResultTv";
  this.pnlResultTv.Size = new System.Drawing.Size(672, 168);
  this.pnlResultTv.TabIndex = 9;
  //
  // btnExpand
  //
  this.btnExpand.Location = new System.Drawing.Point(552, 0);
  this.btnExpand.Name = "btnExpand";
  this.btnExpand.Size = new System.Drawing.Size(112, 23);
  this.btnExpand.TabIndex = 11;
  this.btnExpand.Text = "展开所有内容(&E)";
  this.btnExpand.Click += new System.EventHandler(this.btnExpand_Click);
  //
  // label1
  //
  this.label1.Location = new System.Drawing.Point(8, 8);
  this.label1.Name = "label1";
  this.label1.Size = new System.Drawing.Size(56, 16);
  this.label1.TabIndex = 10;
  this.label1.Text = "匹配结果";
  //
  // tvMatch
  //
  this.tvMatch.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    | System.Windows.Forms.AnchorStyles.Left)
    | System.Windows.Forms.AnchorStyles.Right)));
  this.tvMatch.ImageIndex = -1;
  this.tvMatch.Location = new System.Drawing.Point(0, 24);
  this.tvMatch.Name = "tvMatch";
  this.tvMatch.SelectedImageIndex = -1;
  this.tvMatch.Size = new System.Drawing.Size(672, 144);
  this.tvMatch.TabIndex = 9;
  //
  // btnMatch
  //
  this.btnMatch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
  this.btnMatch.Location = new System.Drawing.Point(337, 648);
  this.btnMatch.Name = "btnMatch";
  this.btnMatch.TabIndex = 10;
  this.btnMatch.Text = "Match(&M)";
  this.btnMatch.Click += new System.EventHandler(this.btnMatch_Click);
  //
  // btnSplit
  //
  this.btnSplit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
  this.btnSplit.Location = new System.Drawing.Point(433, 648);
  this.btnSplit.Name = "btnSplit";
  this.btnSplit.TabIndex = 11;
  this.btnSplit.Text = "Split(&S)";
  this.btnSplit.Click += new System.EventHandler(this.btnSplit_Click);
  //
  // btnReplace
  //
  this.btnReplace.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
  this.btnReplace.Location = new System.Drawing.Point(521, 648);
  this.btnReplace.Name = "btnReplace";
  this.btnReplace.TabIndex = 12;
  this.btnReplace.Text = "Replace(&R)";
  this.btnReplace.Click += new System.EventHandler(this.btnReplace_Click);
  //
  // btnMatches
  //
  this.btnMatches.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
  this.btnMatches.Location = new System.Drawing.Point(608, 648);
  this.btnMatches.Name = "btnMatches";
  this.btnMatches.TabIndex = 13;
  this.btnMatches.Text = "Matches(&A)";
  this.btnMatches.Click += new System.EventHandler(this.btnMatches_Click);
  //
  // groupBox1
  //
  this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
    | System.Windows.Forms.AnchorStyles.Right)));
  this.groupBox1.Controls.Add(this.txtReplacement);
  this.groupBox1.Location = new System.Drawing.Point(8, 416);
  this.groupBox1.Name = "groupBox1";
  this.groupBox1.Size = new System.Drawing.Size(672, 56);
  this.groupBox1.TabIndex = 14;
  this.groupBox1.TabStop = false;
  this.groupBox1.Text = "替换字符串";
  //
  // txtReplacement
  //
  this.txtReplacement.Dock = System.Windows.Forms.DockStyle.Fill;
  this.txtReplacement.Location = new System.Drawing.Point(3, 17);
  this.txtReplacement.Multiline = true;
  this.txtReplacement.Name = "txtReplacement";
  this.txtReplacement.ScrollBars = System.Windows.Forms.ScrollBars.Both;
  this.txtReplacement.Size = new System.Drawing.Size(666, 36);
  this.txtReplacement.TabIndex = 9;
  this.txtReplacement.Text = "";
  //
  // pnlResultTxt
  //
  this.pnlResultTxt.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    | System.Windows.Forms.AnchorStyles.Left)
    | System.Windows.Forms.AnchorStyles.Right)));
  this.pnlResultTxt.Controls.Add(this.btnSaveResult);
  this.pnlResultTxt.Controls.Add(this.txtResult);
  this.pnlResultTxt.Controls.Add(this.label2);
  this.pnlResultTxt.Location = new System.Drawing.Point(8, 472);
  this.pnlResultTxt.Name = "pnlResultTxt";
  this.pnlResultTxt.Size = new System.Drawing.Size(672, 168);
  this.pnlResultTxt.TabIndex = 15;
  //
  // btnSaveResult
  //
  this.btnSaveResult.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
  this.btnSaveResult.Location = new System.Drawing.Point(560, 0);
  this.btnSaveResult.Name = "btnSaveResult";
  this.btnSaveResult.Size = new System.Drawing.Size(88, 23);
  this.btnSaveResult.TabIndex = 12;
  this.btnSaveResult.Text = "保存匹配结果";
  this.btnSaveResult.Click += new System.EventHandler(this.btnSaveResult_Click);
  //
  // txtResult
  //
  this.txtResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
    | System.Windows.Forms.AnchorStyles.Left)
    | System.Windows.Forms.AnchorStyles.Right)));
  this.txtResult.Location = new System.Drawing.Point(0, 24);
  this.txtResult.Multiline = true;
  this.txtResult.Name = "txtResult";
  this.txtResult.ReadOnly = true;
  this.txtResult.ScrollBars = System.Windows.Forms.ScrollBars.Both;
  this.txtResult.Size = new System.Drawing.Size(672, 144);
  this.txtResult.TabIndex = 11;
  this.txtResult.Text = "";
  //
  // label2
  //
  this.label2.Location = new System.Drawing.Point(8, 8);
  this.label2.Name = "label2";
  this.label2.Size = new System.Drawing.Size(56, 16);
  this.label2.TabIndex = 10;
  this.label2.Text = "匹配结果";
  //
  // frmRegexTester
  //
  this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
  this.ClientSize = new System.Drawing.Size(688, 677);
  this.Controls.Add(this.pnlResultTxt);
  this.Controls.Add(this.groupBox1);
  this.Controls.Add(this.btnMatches);
  this.Controls.Add(this.btnReplace);
  this.Controls.Add(this.btnSplit);
  this.Controls.Add(this.btnMatch);
  this.Controls.Add(this.pnlTest);
  this.Controls.Add(this.grpRegOption);
  this.Controls.Add(this.btnSavePtn);
  this.Controls.Add(this.btnOpenPtn);
  this.Controls.Add(this.label5);
  this.Controls.Add(this.btnIsMatch);
  this.Controls.Add(this.txtPattern);
  this.Controls.Add(this.pnlResultTv);
  this.MinimumSize = new System.Drawing.Size(650, 600);
  this.Name = "frmRegexTester";
  this.Text = "正则表达式测试器";
  this.grpRegOption.ResumeLayout(false);
  this.pnlTest.ResumeLayout(false);
  this.pnlResultTv.ResumeLayout(false);
  this.groupBox1.ResumeLayout(false);
  this.pnlResultTxt.ResumeLayout(false);
  this.ResumeLayout(false);
  }
  #endregion
  ///
  /// 应用程序的主入口点。
  ///
  [STAThread]
  static void Main()
  {
  Application.Run(new frmRegexTester());
  }
  #region 自定义函数
 
  //从指定文件中得到匹配字符串
  private void btnOpenPtn_Click(object sender, System.EventArgs e) {
  try{
    if(dlgOpen.ShowDialog() == DialogResult.OK ){
    txtPattern.Text= RegexTest.GetContent(dlgOpen.FileName);
    }
  }catch( Exception ex){
    MessageBox.Show(ex.Message,"文件操作错误");
  }
  }
 
  //把匹配模式保存到文件中,使用append方式
  private void btnSavePtn_Click(object sender, System.EventArgs e) {
  try{
    if( dlgSave.ShowDialog() == DialogResult.OK){
    RegexTest.SaveContent(dlgSave.FileName,txtPattern.Text);
    }
  }catch( Exception ex){
    MessageBox.Show(ex.Message,"错误");
  }
  }
  //保存匹配结果
  private void btnSaveResult_Click(object sender, System.EventArgs e) {
  if( txtResult.Text ==""){
    MessageBox.Show("匹配结果内容为空\n不能保存","错误");
    return;
  }

  }
  //从指定文件中得到要匹配的内容
  private void btnOpenInput_Click(object sender, System.EventArgs e) {
  try{
    if(dlgOpen.ShowDialog() == DialogResult.OK ){
    txtTest.Text= RegexTest.GetContent(dlgOpen.FileName);
    }
  }catch( Exception ex){
    MessageBox.Show(ex.Message,"文件操作错误");
  }
  }
  //扩展所有的TreeView控件内容
  private void btnExpand_Click(object sender, System.EventArgs e) {
  this.tvMatch.ExpandAll();
  }
  //得到指定的RegexOptions选项
  private RegexOptions GetRegexOptions(){
  RegexOptions regOpt = RegexOptions.None;
  if( chkCompiled.Checked  == true) regOpt |= RegexOptions.Compiled;
  if( chkCultureInvariant.Checked == true) regOpt |= RegexOptions.CultureInvariant;
  if( chkECMAScript.Checked  == true) regOpt |= RegexOptions.ECMAScript;
  if( chkExplicitCapture.Checked == true) regOpt |= RegexOptions.ExplicitCapture;
  if( chkIgnoreCase.Checked  == true) regOpt |= RegexOptions.IgnoreCase;
  if( chkIgnorePatternWhitespace.Checked==true) regOpt |= RegexOptions.IgnorePatternWhitespace;
  if( chkMultiline.Checked  == true) regOpt |= RegexOptions.Multiline;
  if( chkRightToLeft.Checked  == true) regOpt |= RegexOptions.RightToLeft;
  if( chkSingleline.Checked  == true) regOpt |= RegexOptions.Singleline;
  return regOpt;
  }
  //是否匹配
  private void btnIsMatch_Click(object sender, System.EventArgs e) {
  if( RegexTest.IsMatch(txtPattern.Text,txtTest.Text,this.GetRegexOptions())){
    MessageBox.Show("匹配成功!","匹配成功");
  }else{
    MessageBox.Show("匹配不成功\n你也许需要修改Pattern","匹配不成功");
  }
  }
  //只进行一次匹配测试
  private void btnMatch_Click(object sender, System.EventArgs e) {
  pnlResultTxt.Visible= false;
  pnlResultTv.Visible = true;
  this.tvMatch.Nodes.Clear();
  RegexTest regTest = new RegexTest(this.GetRegexOptions());
  regTest.Pattern  = txtPattern.Text;
  regTest.Input  = txtTest.Text;
  regTest.Match(this.tvMatch);
 
  }
  //字符串分割
  private void btnSplit_Click(object sender, System.EventArgs e) {
  pnlResultTv.Visible  = false;
  pnlResultTxt.Visible = true;
  txtResult.Text  = "";
  RegexTest regTest = new RegexTest(this.GetRegexOptions());
  regTest.Pattern  = txtPattern.Text;
  regTest.Input  = txtTest.Text;
  regTest.Split(txtResult);
  }
  //字符串替换
  private void btnReplace_Click(object sender, System.EventArgs e) {
  pnlResultTv.Visible  = false;
  pnlResultTxt.Visible = true;
  txtResult.Text  = "";
  RegexTest regTest = new RegexTest(this.GetRegexOptions());
  regTest.Pattern  = txtPattern.Text;
  regTest.Input  = txtTest.Text;
  regTest.Replace(txtResult,txtReplacement.Text);
  }
  //得到所有匹配组
  private void btnMatches_Click(object sender, System.EventArgs e) {
 
  pnlResultTxt.Visible= false;
  pnlResultTv.Visible = true;
  this.tvMatch.Nodes.Clear();
  RegexTest regTest = new RegexTest(this.GetRegexOptions());
  regTest.Pattern  = txtPattern.Text;
  regTest.Input  = txtTest.Text;
  regTest.Matches(this.tvMatch);
  }

  #endregion
 

}
}
RegexTest类代码:
/* 程序名  : RegexTester
* 用途  : .net下的正则表达式测试程序
*  文件名  :  RegexTest.cs
* 作者  : silverduck
* 日期  : 04/05/2004
* e-Mail  : silverduck@eyou.com
*/

using System;
using System.IO;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace RegexTester
{
///
/// 正则表达式测试类。用于测试各种正则表达式。
///
public class RegexTest {
  #region 私有变量
 
 
  private string  pattern;  //模式字符串
  private string  input;  //输入字符串
  private Regex  rgx;  //正则表带式
  private RegexOptions rgxOpt;  //正则表达式选项
 
   
  #endregion 私有变量
  #region 公有属性
  ///
  /// 匹配模式字符串
  ///
  public string Pattern{
  get{ return pattern;}
  set{ pattern = value;}
  }
  ///
  /// 输入的要匹配的字符串
  ///
  public string Input{
  get{ return input;}
  set{ input = value;}
  }
  ///
  /// 正则表达式选项
  ///
  public RegexOptions RgxOptions{
  get{return rgxOpt;}
  set{rgxOpt = value;}
  }
 
  #endregion 公有属性
  #region 构造函数
 
  ///
  /// 正则表达式测试类构造函数
  ///
  ///正则表达式选项
  public RegexTest(RegexOptions rgxOpt):this(rgxOpt,"",""){ }
  ///
  /// 正则表达式测试类构造函数
  ///
  ///正则表达式选项
  ///模式匹配字符串
  ///输入字符串
  public RegexTest(RegexOptions rgxOpt,string pattern,string input){
  this.Pattern  = pattern;
  this.rgxOpt  = rgxOpt;
  this.Input  = input;
  rgx    = null;
 
  }
 
  #endregion 构造函数
  #region 私有方法
  ///
  /// 得到正则表达式类
  ///
  private void CreateRegex(){
  if( pattern != "" && input != ""){
    rgx = new Regex(pattern,rgxOpt);
  }
  }
  ///
  /// 设置显示匹配结果的TreeView控件
  ///
  /// 显示匹配结果的TreeView控件
  /*  在TreeView控件中显示的内容格式:
  ╠匹配成功
  ╚Match数目
  ╠Match-0
  ╠结果
    ╠Group数目
    ╠Match属性index
    ╠Match属性length
    ╠Match属性value
  ╠Group-0
    ╠结果
    ╠Capture数目
    ╠Group属性index
    ╠Group属性length
    ╠Group属性value
    ╠Capture-0
    ╠Capture属性index
    ╠Capture属性length
    ╠...
    ╠Capture-1
    ╠Capture属性
    ╠Capture属性
    ╠...
    ╠...
    ╠Capture-n 
  ╠Group-1
    ╠结果
    ╠...
    ╠Capture-0
    ╠Capture属性
    ╠Capture属性
    ╠...
    ╠...
    ╠Capture-n
  ╠...
  ╠Group-n
  ╠Match-1
  ╠结果
    ╠...
  ╠Group-0
    ...
  ╠Group-n
  ...
  ╠Match-n 
  */
  private void SetShowResultTreeView(MatchCollection aMatch,TreeView tvShowResult){
  //指定的TreeView控件不为空则向其中写入值
  //否则不作任何处理
  if( tvShowResult != null && aMatch != null ){
    tvShowResult.BeginUpdate(); 
    tvShowResult.Nodes.Clear();
    //写入捕获结果总体信息
    if( aMatch.Count > 0){
   
    tvShowResult.Nodes.Add("匹配成功");
    tvShowResult.Nodes[0].Nodes.Add("Match数—"+aMatch.Count.ToString());
    for( int i=0;i < aMatch.Count && aMatch[i].Success;i++ ){
      TreeNode tn = new TreeNode("Match - " + i.ToString());
      this.AddMatch(tn,aMatch[i]);
      tvShowResult.Nodes.Add(tn);
    }
    }
    //写入各个捕获组
    tvShowResult.EndUpdate();
  } 
  }

  ///
  /// 向TreeNode中插入匹配所得的Match
  ///
  /// 要向其中插入内容的节点
  /// 要插入到节点中的Match结果
  private void AddMatch(TreeNode tn, Match mth){
  tn.Nodes.Add("结果");
  tn.Nodes[0].Nodes.Add("Group 数 — "+mth.Captures.Count.ToString());
  tn.Nodes[0].Nodes.Add("起始位置 — "+mth.Index.ToString());
  tn.Nodes[0].Nodes.Add("长    度 — "+mth.Length.ToString());
  tn.Nodes[0].Nodes.Add("捕 获 值 — "+mth.Value);
                 
  for( int i=0;i <  mth.Groups.Count;i++ ){
    TreeNode tnd = new TreeNode("Group - " + i.ToString());
    this.AddGroup(tnd,mth.Groups[i]);
    tn.Nodes.Add(tnd);
  }
  }
  ///
  /// 向TreeNode中插入匹配所得的Group
  ///
  /// 要向其中插入内容的节点
  /// 要插入到节点中的Group结果
  private void AddGroup(TreeNode tn, Group grp){
  tn.Nodes.Add("结果");
  tn.Nodes[0].Nodes.Add("Capture数—"+grp.Captures.Count.ToString());
  tn.Nodes[0].Nodes.Add("起始位置 — "+grp.Index.ToString());
  tn.Nodes[0].Nodes.Add("长    度 — "+grp.Length.ToString());
  tn.Nodes[0].Nodes.Add("捕 获 值 — "+grp.Value);
 
  for( int i=0;i < grp.Captures.Count;i++ ){
    TreeNode tnd = new TreeNode("Capture - " + i.ToString());
    this.AddCapture(tnd,grp.Captures[i]);
    tn.Nodes.Add(tnd);
  }
  }
  ///
  /// 向TreeNode中插入匹配所得的Capture
  ///
  /// 要向其中插入内容的节点
  /// 要插入到节点中的Capture结果
  private void AddCapture(TreeNode tn, Capture cpt){
  tn.Nodes.Add("起始位置 — "+cpt.Index.ToString());
  tn.Nodes.Add("长    度 — "+cpt.Length.ToString());
  tn.Nodes.Add("捕 获 值 — "+cpt.Value);
 
  }
 
 
  #endregion 私有方法
  #region 公有方法
  ///
  /// 根据给定的匹配模式替换输入的字符串
  ///
  public void Matches(TreeView tv){
  MatchCollection aMatch;
  this.CreateRegex();
  if( rgx != null){
    aMatch=rgx.Matches(input);
    this.SetShowResultTreeView(aMatch,tv);
   
  }
  }
  ///
  /// 得到一次匹配结果
  ///
  /// 显示匹配结果的TreeView控件
  public void Match(TreeView tv){
  this.CreateRegex();
 
  if( rgx != null){
    Match mth = rgx.Match(input);
    if( mth.Success){
    TreeNode tn= new TreeNode("匹配成功");
    tv.Nodes.Add(tn);
    this.AddMatch(tn,mth);
    }
  }
  }
  ///
  /// 根据给定的匹配模式分隔输入的字符串
  ///
  /// 要在其中显示结果的文本框控件
  public void Split(TextBox txtResult){
  this.CreateRegex();
 
  if( rgx != null){
    string[] aStr = rgx.Split(input);
    txtResult.AppendText("通过分割共得到"+aStr.Length.ToString()+"个字符串。它们分别为:"+System.Environment.NewLine);
    foreach( string s in aStr){
    txtResult.AppendText(s+System.Environment.NewLine);
    }
  }
  }
 
  ///
  /// 根据给定的匹配模式替换输入的字符串
  ///
  /// 要在其中显示结果的文本框控件
  /// 替换的内容
  public void Replace(TextBox txtResult,string replacement){
  this.CreateRegex();
 
  if( rgx != null){
    txtResult.AppendText( "替换结果为:"+ System.Environment.NewLine);
    txtResult.AppendText(rgx.Replace(input,replacement));
  }
  }

  ///
  /// 是否匹配指定内容
  ///
  public static bool IsMatch(string pattern,string content,RegexOptions regOpt){
  return Regex.IsMatch(content,pattern,regOpt);
  }
 
  ///
  /// 从指定的文件中得到字符串
  ///
  /// 要从中得到字符串的文件名
  /// 返回从文件中得到的字符串
  public static string GetContent(string fileName){
  string content="";
  try{
    StreamReader sr = new StreamReader(fileName,System.Text.Encoding.Default,true);
    content  = sr.ReadToEnd();
    sr.Close();
  }catch(Exception ex){
    throw ex;
  }
  return content;
  }

  ///
  /// 把指定的内容存入到指定的文件名中
  ///
  /// 要存入内容的文件名
  /// 要存入的内容
  public static void SaveContent(string fileName,string content){
  try{
    StreamWriter sw = new StreamWriter(fileName,true,System.Text.Encoding.Default);
    sw.Write(content+System.Environment.NewLine);
    sw.Close();
  }catch(Exception ex){
    throw ex;
  }
  }

  #endregion
}

}



关于这篇文章的评论 [注意:这里仅仅是给大家提供了一个发表对文章本身看法的地方,如果有疑问,请到论坛提出] 我要提问!
miles        2004/6/1 14:17:00
把它当作附件上传
然后写写说明就好啦。。这样子不方便阅读啊。
q        2004/6/1 10:48:00
吐血推荐
只要大家不怕麻烦!研究透了,以后在正则表达式上就不会再有什么问题,吐血推荐!
标题
内容
发言
*您尚未以注册用户身份登录,不能发表评论。这里登录
您的位置
  (c)2000-2020 Yup Studio, all rights reserved.  
210.9375