65.9K
CodeProject 正在变化。 阅读更多。
Home

正则表达式库生成器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.63/5 (23投票s)

2005年6月6日

CPOL

7分钟阅读

viewsIcon

154364

downloadIcon

3594

一个用于快速创建和修改 .NET 正则表达式库的工具

引言

正则表达式是开发人员武器库中一个极其强大的工具。我认为,.NET Framework 中提供的正则表达式及其周围类别的风格非常出色。在 System.Text.RegularExpressions 命名空间中所有类型的所有方法中最有用的是 Regex 类中的静态 CompileToAssembly 方法。CompileToAssembly 方法允许您将正则表达式编译成一个独立的程序集 - 您可能认为这没什么用。那么,请思考一下我当时面临的问题

问题

我当时正在开发,实际上我仍在开发一个进行大量文本处理并大量使用正则表达式的应用程序。现在,正则表达式是复杂且神秘的生物。您可能认为自己对它们了解很多,但相信我,您永远不会了解得像阅读了 《精通正则表达式,第二版》 [^] 几百遍之后那样多 :-)。

我一秒钟都不相信我编写的正则表达式第一次就能高效运行。当然,它会完全按照我的意愿工作,但它会以尽可能高效的方式工作吗?很可能不会。因此,我需要大量使用正则表达式,并且我知道我没有时间来花时间,或者说我不想花时间,立即衡量我编写的每个正则表达式的性能,然后花大量时间使其尽可能高效...所以我面临一个问题:当我需要新的、更高效的正则表达式时,如何轻松地在我的应用程序中替换它们?我不想将它们移到配置文件中,因为最终用户很容易修改它们,而且相对而言,加载和解析 XML 已经是一项足够慢的操作。

解决方案

“正则表达式库”,CompileToAssembly 在此之时解救了我。我编写了一个工具,可以快速方便地向“正则表达式库”添加多个正则表达式。我可以创建新库,加载和修改现有库,快速添加、删除、修改正则表达式,然后通过自动更新到应用程序来重新分发“正则表达式库”程序集。“父”应用程序可以获得新的超高效正则表达式,并在需要时无需用户干预即可继续工作。

The RegexLibrary Builder main screen

图 1:RegexLibrary Builder 主屏幕

正则表达式库构建器

正则表达式库构建器允许您:

  • 创建符合 CLS 标准的正则表达式库:包含仅正则表达式的 .NET 程序集。
  • 将多个正则表达式添加到单个程序集中。
  • 在每个正则表达式的基础上定义单独的名称、命名空间、正则修饰符和可访问性级别。
  • 重新加载现有的正则表达式库,并添加、删除或修改其中包含的正则表达式。
  • 手动设置程序集的版本号,以帮助确保与现有版本的兼容性。
  • 还有很多很多... ;-)

说真的,我编写这个工具是因为我真的需要它。我不确定其他人是否需要,但如果您需要,可以从上面下载。请记住,这个工具是为了我的个人使用而快速构建的,所以不要指望任何花哨的异常处理、漂亮的编码模式、注释、单元测试或类似的东西。 ;-) 它**会**有 bug...如果您发现一个或多个 bug,我将非常感激您在此处留下评论或联系我。:-)

如果人们对该工具有兴趣,我将进一步开发它,并添加一些功能,例如对已创建的正则表达式库进行签名的能力,在每个正则表达式的基础上添加自定义属性的能力,添加一些异常处理、代码注释等等。另外,如果您使用这个工具,请告诉我!很高兴知道您为自己创建的东西对他人也有用。

创建和修改正则表达式库

RegexLibrary Builder 是一个易于使用的工具,大多数人应该能够毫不费力地理解它。但是,为了以防万一,我将快速(非常快速)概述如何创建一个正则表达式库,然后如何再次打开并修改它。

创建正则表达式库

  1. 打开 RegexLibrary Builder 应用程序...当然。;-)

    步骤 2 和 3 是可互换的 - 即顺序无关紧要。

  2. 填写程序集详细信息(图 2)。您可以使用“...”按钮选择保存正则表达式库的位置。填写程序集详细信息

    图 2:填写程序集详细信息

  3. 通过填写正则表达式组框中的详细信息,然后单击“添加”(图 3),创建一个新的正则表达式添加到正则表达式库中。查看 Regulator [^] 和 RegexDesigner.NET [^],这两个是非常棒的正则表达式测试和学习工具。将正则表达式添加到正则表达式库

    图 3:将正则表达式添加到正则表达式库

    现在,该正则表达式将出现在应用程序底部列表框中的正则表达式列表中。

  4. 最后,单击工具栏上的“保存”按钮或从“文件”菜单中选择“保存正则表达式库”。

修改正则表达式库

  1. 通过单击工具栏上的“打开”按钮或从“文件”菜单中选择“加载正则表达式库”来加载正则表达式库。
  2. 当库加载时,其中包含的所有正则表达式都将显示在应用程序底部的列表框中(图 4)。从正则表达式库加载的正则表达式。

    图 4:从正则表达式库加载的正则表达式

  3. 当您单击列表中的正则表达式时,其详细信息将填充到正则表达式组框中。要修改正则表达式,只需更改详细信息,然后再次单击“添加”。您可以通过突出显示正则表达式然后单击“删除”按钮、单击工具栏上的“删除”或从“正则表达式”菜单中选择“删除正则表达式”来删除它。
  4. 当您对所做的更改感到满意时,可以通过单击工具栏上的“保存”按钮或从“文件”菜单中选择“保存正则表达式库”来将更改保存到正则表达式库。

使用正则表达式库

一旦创建了正则表达式库,在您的应用程序中使用它就非常简单了

  1. 像添加任何其他程序集一样,添加对该程序集的引用。
  2. 添加您想要的正则表达式的命名空间的 `using` 语句。请记住,如果您愿意,可以为每个正则表达式设置命名空间。
  3. 像使用 Regex 类一样使用正则表达式
    // Check to see if some text matches
    bool result = DutchPostCode.IsMatch("some text");
    
    // Get all the matches
    MatchCollection matches = DutchPostCode.Matches(new 
                    System.IO.StreamReader(@"c:\DATA.txt").ReadToEnd()));
    
    // Basically, just use it as you would the Regex Class

源代码

源代码很简单。没什么复杂的。正如我上面提到的,我快速地为自己编写了这个工具。我没打算发布源代码,所以您不会找到任何花哨的异常处理、漂亮的编码模式、注释、单元测试或类似的东西。 ;-) 它**会**有 bug...如果您发现一个或多个 bug,我将非常感激您在此处留下评论或联系我。:-)

有趣的源代码文件是 _RegexLibraryBuilder.cs_,其中包含 RegexLibraryBuilder 类和嵌套的 RegexLibraryLoader 类。还有一个强类型化的 RegexCompilationInfo 集合类(巧妙地命名为 RegexCompilationInfoCollection ;-),其中包含您的样板强类型化集合代码。RegexLibraryBuilderForm 类是 UI 的实现,在有人指出之前,我知道它不是很有模块化或设计得很好。我应该将某些方面移到一个自定义控件中,并提供对某些内容的属性访问,并将某些内容移到单独的类中。然而,这个应用程序是快速拼凑起来的。

链接

两个非常棒的正则表达式测试和学习工具

其他有用链接

历史

  • 2005 年 6 月 14 日 - 添加了对保存前验证正则表达式的支持:现在您无法保存无效的正则表达式。
  • 2005 年 6 月 8 日 - 更新了格式。
  • 2005 年 6 月 6 日 - 首次发布。
© . All rights reserved.