文档章节

正则表达式测试工具 Regex Tester 的使用方法

北风其凉
 北风其凉
发布于 2015/07/28 22:55
字数 2023
阅读 1476
收藏 22
点赞 1
评论 0

正则表达式测试工具“RegexTester”,下载地址:http://www.oschina.net/p/regex+tester

一、关于本文

今天的工作中遇到了一些正则表达式,我需要检验它们是否正确,不过我对自己目测的结果又没有信心。后来我想起以前看过一个帖子《正则表达式30分钟入门教程》,里面提到过一个工具叫做“RegexTester”,不过下载下来却感到用起来比较棘手。因为是第一次用的缘故,这个软件也没有提供足够多的帮助信息。所以我下班后研究了一下这个软件的几个主要功能,研究结果记录如下。

二、关于“RegexTester”

其实这个软件真正的名字叫“YART”,它是“Yet Another Regex Tester”的缩写,翻译成中文就是“另外一个正则表达式测试工具”。在Form的Title位置,写的文字是“Code Archiects Regex Tester”,说明这是给代码设计师(就是程序猿)使用的正则表达式测试工具。

三、三个基本功能

1、Find功能

Find功能旨在从一个源字符串(Source)中,通过给出的正则表达式(Regex),找出匹配的子串(Matches)。进入Find功能的快捷键是“Ctrl+F”,该界面包含Regex、Source、Matches三个区域。按下命令(Commands)菜单中的执行(Run),可以生成结果集,快捷键为F5。

在Regex区域中输入正则表达式,在Source区域中输入待匹配的文本,Matches区域为程序判断的结果集

Find功能的判断逻辑,表现成代码,是这个样子的:

VB.NET代码:

Dim re As New Regex("[0-9]{8}", RegexOptions.None)
Dim mc As MatchCollection = re.Matches("text")
For Each ma As Match in mc
    'TODO
Next

C#代码:

Regex re = new Regex(@"[0-9]{8}", RegexOptions.None);
MatchCollection mc = re.Matches("text");
foreach (Match ma in mc)
{
    //TODO
}

这些代码是通过“生成代码”(Generate Code)功能得到的,进入该功能的快捷键为F2,这个界面可以生成VB.NET和C#两种代码,其中C#还可以在字符串前加“ @ ”符号,说明该字符串忽略其中的C#转义字符:

2、Replace功能

Replace功能的作用是从一个源字符串(Source)中,通过给出的正则表达式(Regex)和替换文本(Replace),生成替换后的字符串(Report)。进入Replace功能的快捷键是“Ctrl+R”,该界面包含Regex、Replace、Source、Report三个区域。

在Regex区域中输入正则表达式,在Replace区域中输入要替换的文本,在Source区域中输入源字符串,Report区域显示替换后的字符串

Replace功能的判断逻辑,表现成代码,是这个样子的:

VB.NET代码:

Dim re As New Regex("[0-9]{8}", RegexOptions.None)
Dim result As String = re.Replace("text")

C#代码:

Regex re = new Regex(@"[0-9]{8}", RegexOptions.None);
string result = re.Replace("text");

3、Split功能

Split功能会将源字符串(Source)中的文本,按正则表达式(Regex)的匹配情况,分成若干子串,并返回这些子串的集合(Report)

在Regex区域中输入正则表达式,在Source区域中输入源字符串,Report区域显示分割后的各个字符串

Split功能的判断逻辑,表现成代码,是这个样子的:

VB.NET代码:

Dim re As New Regex("[0-9]{8}", RegexOptions.None)
Dim lines() As String = re.Split("text")
For Each line As String In lines
    'TODO
Next

C#代码:

Regex re = new Regex(@"[0-9]{8}", RegexOptions.None);
string[] lines= re.Split("text");
foreach (string line in lines)
{
    //TODO
}

四、正则表达式选项

在选项菜单(Options)下面有9个正则表达式选项

如果没有特别的说明,这些突兀的词汇会让人非常难以理解。后来我发现这9个选项来自于.NET中命名空间“System.Text.RegularExpressions”下的枚举RegexOptions。于是我进入到VS中找到了RegexOptions枚举,这些选项的实际作用可以从这个枚举的元数据文件中窥得一二:

#region 程序集 System.dll, v4.0.0.0
// C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.dll
#endregion

using System;

namespace System.Text.RegularExpressions
{
    // 摘要:
    //     提供用于设置正则表达式选项的枚举值。
    [Flags]
    public enum RegexOptions
    {
        // 摘要:
        //     指定不设置任何选项。
        None = 0,
        //
        // 摘要:
        //     指定不区分大小写的匹配。
        IgnoreCase = 1,
        //
        // 摘要:
        //     多行模式。 更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。
        Multiline = 2,
        //
        // 摘要:
        //     指定唯一有效的捕获是显式命名或编号的 (?<name>…) 形式的组。 这使未命名的圆括号可以充当非捕获组,并且不会使表达式的语法 (?:...)
        //     显得笨拙。
        ExplicitCapture = 4,
        //
        // 摘要:
        //     指定将正则表达式编译为程序集。 这会产生更快的执行速度,但会增加启动时间。 在调用 System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName)
        //     方法时,不应将此值分配给 System.Text.RegularExpressions.RegexCompilationInfo.Options
        //     属性。
        Compiled = 8,
        //
        // 摘要:
        //     指定单行模式。 更改点 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配。
        Singleline = 16,
        //
        // 摘要:
        //     消除模式中的非转义空白并启用由 # 标记的注释。 但是,System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace
        //     值不会影响或消除字符类中的空白。
        IgnorePatternWhitespace = 32,
        //
        // 摘要:
        //     指定搜索从右向左而不是从左向右进行。
        RightToLeft = 64,
        //
        // 摘要:
        //     为表达式启用符合 ECMAScript 的行为。 该值只能与 System.Text.RegularExpressions.RegexOptions.IgnoreCase、System.Text.RegularExpressions.RegexOptions.Multiline
        //     和 System.Text.RegularExpressions.RegexOptions.Compiled 值一起使用。 该值与其他任何值一起使用均将导致异常。
        ECMAScript = 256,
        //
        // 摘要:
        //     指定忽略语言中的区域性差异。 有关更多信息,请参见[<topic://cpconPerformingCulture-InsensitiveOperationsInRegularExpressionsNamespace>]。
        CultureInvariant = 512,
    }
}

这些选项可以同时选择一个或多个,.NET是通过位运算判断哪个选项起作用的。

五、编译功能

在命令(Commands)菜单下的编译(Compile to Assembly)中,有一个界面可以将正则表达式编译到dll中

Name为dll文件名,Root Namespace为命名空间,编译完毕后的dll如下:

这个DLL可以被.NET程序集引用,并调用里面已经生成好的类

六、其他用法

1、在文件(File)菜单的属性(Properties)中,对YART的功能有一个统一的界面进行设置,快捷键为:F4

2、在文件(File)菜单的保存(Save)和另存为(Save As)中,可以将当前的配置内容保存到*.regex文件中,实际上这是一个XML格式文件,下面是一个该类文件的内容样例:

<?xml version="1.0"?>
<ProjectOptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <RegexName>test</RegexName>
  <RegexDescription />
  <RegexText>[0-9]{8}</RegexText>
  <ReplaceText>TSYBIUS2014</ReplaceText>
  <SourceText>abcd12345678efgh87654321ijhl</SourceText>
  <Command>Find</Command>
  <RegexOptions>None</RegexOptions>
  <Detail>Groups</Detail>
  <MaxMatches>1000</MaxMatches>
  <Sort>Position</Sort>
  <WordWrap>true</WordWrap>
  <Format>Auto</Format>
  <IncludeEmptyGroups>true</IncludeEmptyGroups>
  <Language>VisualBasic</Language>
  <VerbatimStrings>false</VerbatimStrings>
  <InstanceMethods>true</InstanceMethods>
  <AssumeImports>true</AssumeImports>
  <GenerateLoop>true</GenerateLoop>
  <IncludeComment>true</IncludeComment>
  <CopyCodeOnExit>true</CopyCodeOnExit>
</ProjectOptions>

3、在文件(File)菜单的加载源字符串(Load Source)中,可以将文本从txt文件、doc文件内读取到Source输入框中,快捷键为:Ctrl+L

4、在命令(Commands)菜单下的转义字符(Escape)中,可以按正则表达式的转义字符,转义(Escape)或反转义(Unescape)字符串

5、在结果(Results)菜单下的结果集最大元素数(Max number of results)中,可以指定结果集最多有多大,默认值为1000

6、在结果(Results)菜单中给出了结果集的四种排序方式,它们分别是:

  • 按匹配的先后顺序(Sort on Position)

  • 按匹配结果的字符串大小排序(Sort on Name)

  • 按匹配结果的长短排序,短在前长在后(Shortest matches first)

  • 按匹配结果的长短排序,长在前短在后(Largest matches first)

7、最后给关于界面一张特写:

(这是一个用来编写和校验正则表达式、生成VB.NET/C#代码、编译dll类库的工具)

七、另一个发现(:-P)

我用VS自带的反汇编工具ILDASM对这个程序的源码进行了反汇编,可以看出这个程序是用VisualBasic写的(准确来说是VB.NET)。

END

© 著作权归作者所有

共有 人打赏支持
北风其凉

北风其凉

粉丝 114
博文 497
码字总数 462457
作品 4
朝阳
程序员
10 个在线正则表达式测试网站

正则表达式,提供了简洁、灵活的手段,用于匹配文本字符串,如特定的字符,文字或字符样式。它对于初学者理解和使用所有的正则表达式语法是个头疼的事情。幸运的是,你可以获得在线帮助。 在...

老枪
2011/03/28
30.4K
10
正则表达式测试工具--Regex Tester

Regex Tester 用 VB.NET 编写的用来测试正则表达式的工具。该工具也被称作YART(Yet Another Regex Tester的缩写),可以用来编写和校验正则表达式、生成相关的VB.NET/C#代码、编译相关的dll...

匿名
2010/07/02
60K
1
精通正则表达式的 12 个有用资源

任何开发项目,不管使用的何种编程语言,经常都需要从给定的数据中提取一些值然后进行验证。例如输入的校验、过滤 URL 变量之类。而正则表达式用来处理这样的任务可以说是轻而易举,而且代码...

oschina
2013/07/31
12.8K
56
Common Gui Tools 1.0,Java GUI实用小工具集

Common Gui Tools 是用java编写,GUI界面的实用小工具集,1.0版暂有6个小工具: 1,编码转换:Character Converter 2,加密解密:Encrypt And Decrypt 3,正则表达式验证:Regex Tester 4,执...

bs2004
2013/03/20
1K
18
Eclipse Regular Expression Tester

这是一款eclipse环境下的一个正则表达式的测试插件。 在线安装URL:http://brosinski.com/regex/update

匿名
2008/09/16
3K
0
微软发布正则表达式安全漏洞测试工具

微软公司发布了一个免费的工具 SDL Regex Fuzzer 用以帮助程序员测试他们的正则表达式是否存在 DoS 漏洞。 正则表达式模式中包含了某些执行起来极其耗时(指数时间)条款,(例如:分组条款中...

红薯
2010/10/19
2K
0
.Net 高效开发之不可错过的实用工具

工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存管理,诊断工具等,涉及开发过程的各...

葡萄城控件技术团队
2016/03/04
333
0
70多个提高.NET程序员效率的开发工具

Visual Studio Visual Studio Productivity Power tool: VS 专业版的效率工具。 Web Essentials: 提高开发效率,能够有效的帮助开发人员编写CSS, JavaScript, HTML 等代码。 MSVSMON: 远程D...

浪漫程序人生
2016/03/29
199
0
C语言中使用正则表达式

一个正则表达式的教程可以参看(里面有个测试正则表达式的工具) http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm#ad 正则表达是用来匹配字符串的好东东。 如果用户熟悉...

元禛慎独
2016/09/26
20
0
正则表达式匹配异常导致崩溃的问题

今天写一个正则表达式,完成这样的需求:对输入的文字进行检查,要求输入的内容允许包含小写字母、文字和-./这四个字母。 于是我写的代码如下: //用户名是否有效 +(BOOL) validateUserName...

SunGiantor
2015/04/16
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
33分钟前
13
0
流利阅读笔记30-20180719待学习

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
35分钟前
1
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
48分钟前
6
1
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
今天
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
9
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部