当前位置: 首页 > 编程日记 > 正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

212942_SzMN_1425762.png

一、关于本文

今天的工作中遇到了一些正则表达式,我需要检验它们是否正确,不过我对自己目测的结果又没有信心。后来我想起以前看过一个帖子《正则表达式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。

213832_wuKw_1425762.png

在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#转义字符:

214713_8GnG_1425762.png

2、Replace功能

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

215207_e01H_1425762.png

在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)

215659_pVg5_1425762.png

在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个正则表达式选项

220636_uIgI_1425762.png

如果没有特别的说明,这些突兀的词汇会让人非常难以理解。后来我发现这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
#endregionusing 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中

222904_RfiJ_1425762.png

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

222654_Puvd_1425762.png

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

224306_ooNb_1425762.png

六、其他用法

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、最后给关于界面一张特写:

224843_JCo3_1425762.png

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

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

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

225229_1tFc_1425762.png

END

转载于:https://my.oschina.net/Tsybius2014/blog/484924

相关文章:

一种清除windows通知区域“僵尸”图标的方案——Windows7系统解决方案

Windows7下“僵尸”图标的解决方案 从《一种清除windows通知区域“僵尸”图标的方案——问题分析》&#xff08;以后简称《问题分析》&#xff09;一文中分析的通知区域结构可以看出&#xff0c;Windows7的通知区域比XP通知区域多出了一个“临时”系统通知区域&#xff08;转载…

《评人工智能如何走向新阶段》后记(再续13)

由AI科技大本营下载自视觉中国161. 引自美国科技媒体TNW记者对美欧企业主管与AI专家的访谈录摘要&#xff0c;谈到2020年AI的八大趋势&#xff1a; ①人工智能将使医疗保健更准确、成本更低&#xff1b; ②可解释性和信托及AI伦理将受到更多关注&#xff1b; ③在人工智能领…

在特定情况下的简单SSO实现方案

最近需要实现类似单点登录的功能。情况是这样的&#xff0c;最初在做网站A&#xff0c;做着做着&#xff0c;要做网站B了&#xff0c;要求与网站A完全分开作为两个应用&#xff0c;但用户数据要求与网站A保持一致&#xff0c;也要求用户在网站A登录后&#xff0c;转到网站B时不…

为创业者保驾护航 “无安全 不创业” 安全狗全国路演北京站

2019独角兽企业重金招聘Python工程师标准>>> 2015年上半年&#xff0c;网络安全问题毫无疑问已经成为了互联网行业关注的重点。在短短一年多的时间里&#xff0c;网络安全问题就从隐患转而呈现出爆发之势&#xff0c;即使是网易、支付宝、携程这样的互联网行业巨头也…

一种将快捷方式从开始菜单“常用应用”的中去除的方法

当我们安装一款软件的时候&#xff0c;这款软件的一些快捷方式可能被设置到开始菜单的“常用应用”区域。但是&#xff0c;如果是“卸载”快捷方式被“钉”到该区域&#xff0c;就会造成非常不好的体验。毕竟把“卸载”接口暴露得如此醒目&#xff0c;如同把该款软件的地狱大门…

ISA---不能访问网址或是多次刷新才能访问的解决方法一则

当你安装ISA2006在WINDOWS 2003 SERVER上&#xff0c;并打上SP2补订时。遇SNAT客户端不能访问WEB&#xff0c;但能PING通&#xff0c;能TELNET通&#xff0c;也能访问QQ或是MSN的问题时可以利用以下方法解决。同时&#xff0c;如果你遇到在此环境下&#xff0c;客户端访问外部网…

《评人工智能如何走向新阶段》后记(深谈人工智能发展前沿)

由AI科技大本营下载自视觉中国来自国内外的跟贴留言 深谈人工智能发展前沿 自从我们发表《评人工智能如何走向新阶段》一文以来&#xff0c;至今约5个月&#xff0c;引来了中外专家、草根们的大量跟贴留言&#xff08;也有人转录他人的公开言论作为跟贴来发表的&#xff09;。…

URAL 2027 URCAPL, Episode 1 (模拟)

题意&#xff1a;给你一个HxW的矩阵&#xff0c;每个点是一个指令&#xff0c;根据指令进行一系列操作。 题解&#xff1a;模拟 #include<cstdio> #include<algorithm> using namespace std;const int maxn 101; char G[maxn][maxn];int dx[] {-1,0,1, 0}; int d…

使用WinHttp接口实现HTTP协议Get、Post和文件上传功能

我实现了一个最新版本的接口&#xff0c;详见《实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现》。还有基于libcurl实现的版本《实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现》。以下是原博文&#xff1a; 我们在做项目开发时&#xff0c;往往会…

收藏 | 一文带你总览知识蒸馏,详解经典论文

「免费学习 60 节公开课&#xff1a;投票页面&#xff0c;点击讲师头像」作者&#xff1a;凉爽的安迪来源 | 深度传送门&#xff08;ID&#xff1a;deep_deliver&#xff09;【导读】这是一篇关于【知识蒸馏】简述的文章&#xff0c;目的是想对自己对于知识蒸馏学习的内容和问题…

[工具推荐]用了TrueCrypt 再无难掩之隐

缘起&#xff1a;混在网络n多年了&#xff0c;手头总有些东西不想被别人看到的东西&#xff0c;由于小弟人品好&#xff0c;相貌佳&#xff0c;总有很多朋友喜欢用我的电脑玩啊玩啊……。 近日&#xff0c;冠希、柏芝等前辈以身示法&#xff0c;为我等上了很好一堂关于隐私保护…

利用phpmailer类邮件发送

<?phprequire("class.phpmailer.php"); //下载的文件必须放在该文件所在目录$mail new PHPMailer(); //建立邮件发送类$address "接收方邮箱"; //接收方地址$mail->IsSMTP(); //使用SMTP方式发送$…

据说这是大多数人【减肥】的真实写照

有句诗说得好 “冬天不减肥&#xff0c;夏天徒伤悲” 在这个人人储存脂肪的季节绝对是你甩掉脂肪的好时机&#xff08;毕竟这是一个拼颜值的时代颜值是天生的&#xff0c;可是身材绝不能输&#xff09;但是 据说大多数人的减肥经历其实是这样的减肥第一步管住嘴&#xff0c;迈开…

PE文件和COFF文件格式分析——导出表的应用——一种摘掉Inline钩子(Unhook)的方法

在日常应用中&#xff0c;某些程序往往会被第三方程序下钩子(hook)。如果被下钩子的进程是我们的进程&#xff0c;并且第三方钩子严重影响了我们的逻辑和流程&#xff0c;我们就需要把这些钩子摘掉(Unhook)。本件讲述一种在32位系统上&#xff0c;如何摘掉API钩子的思路和方法。…

设置列表字段为主键

转贴:Sample event handler to set a field as a pr imary key (enforce no duplicates) Got this as a request from a reader- how to prevent users from adding items with same titles as ones that already exist in the list. Codeusing System;using System.Collectio…

谁登录了你的linux

最近有一台数据库服务器自动重启。查了一下相关登录信息&#xff1a;查看linux下的用户登录日志&#xff0c;包括用户登录时所用的主机的ip&#xff1a;more /var/log/secure who /var/log/wtmp干了些什么&#xff1f; root账户下输入su - username 切换到username下输入 histo…

一种使用GDI+对图片尺寸和质量的压缩方法

今天同事向我询问图片压缩的算法&#xff0c;我想起大概两三年前做过的一个项目。其中包含了尺寸和质量两种压缩算法&#xff0c;并且支持JPEG、bmp、PNG等格式。今天把这段逻辑贴出来&#xff0c;供大家参考。&#xff08;转载请指明来源于breaksoftware的CSDN博客&#xff09…

.NET企业级应用架构设计系列之应用服务器

本文属spanzhang&#xff08;张友邦&#xff09;原创&#xff0c;发布地址为&#xff1a;http://blog.csdn.net/spanzhang。转载或引用请注明原文之出处&#xff0c;谢谢&#xff01; .NET企业级应用架构设计系列之开场白 .NET企业级应用架构设计系列之技术选型 这里要说到的…

编程语言发展70年,用50种不同语言输出「Hello World」

「免费学习 60 节公开课&#xff0c;投票页面&#xff0c;点击讲师头像」作者 | Sylvain Saurel译者 | 风车云马责编 | 屠敏【导读】历经 70 年&#xff0c;不断出现的编程语言为开发者解决了哪些难题&#xff1f;其存在又有怎样的特性&#xff1f;本文将以「Hello World」为例…

函数循环的理解

2019独角兽企业重金招聘Python工程师标准>>> var ulObjdocument.getElementById("box"); var lisObjulObj.getElementsTagname("li"); for(var i0;i<lisObj.length;i) { lisObj[i].οnclickfunction()//循环时对应节点绑定事件&#xff0c;事…

从LeNet到GoogLeNet:逐层详解,看卷积神经网络的进化

「免费学习 60 节公开课&#xff1a;投票页面&#xff0c;点击讲师头像」作者 | MrCharles来源 | CSDN原力计划获奖作品&#xff08;*点击阅读原文&#xff0c;查看作者更多文章&#xff09;前言深度学习的兴起使卷积神经网络在计算机视觉方面大放异彩&#xff0c;本文将按时间…

Windows客户端C/C++编程规范“建议”——前言

前言 工作中接触了很多编程规范。其中最有意思的是&#xff0c;公司最近发布了一版C/C编程规范&#xff0c;然后我看到该规范的最后一段时&#xff0c;有这么一句&#xff1a;“该规范不适用于Windows平台开发”。看来这份规范是由做其他平台开发的同学制定的。那么做Windows开…

storm入门教程 第一章 前言[转]

1.1 实时流计算 互联网从诞生的第一时间起&#xff0c;对世界的最大的改变就是让信息能够实时交互&#xff0c;从而大大加速了各个环节的效率。正因为大家对信息实时响应、实时交互的需求&#xff0c;软件行业除了个人操作系统之外&#xff0c;数据库&#xff08;更精确的说是…

Windows客户端C/C++编程规范“建议”——函数

1 函数 1.1 代码行数控制在80行及以内 等级&#xff1a;【要求】 说明&#xff1a;每个函数的代码行数控制应该控制在80行以内。如果超过这个限制函数内部逻辑一般可以拆分。如果试图超过这个标准&#xff0c;请列出理由。但理由不包含如下&#xff1a; 无法拆分。流程内部…

把自己朝九晚五的工作自动化了,有错吗?

作者 | Brian Merchant译者 | 谭开朗编辑 | 屠敏来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;【导读】用代码让自己工作开启自动化之际&#xff0c;是否意味着自己将面临被解雇的风险&#xff1f;2016年&#xff0c;Reddit上出现了一个匿名的帖子&#xff0c;内…

COM组件转换成.NET组件[转]

利用类型库导入器(Type Library Importer)可以将其包装成一个.NET组件&#xff0c;然后就可以像使用.NET组件一样使用它了。 .NET框架只是提供了一个包装&#xff0c;并没有真正改变原有的对象 1.找到要转换的.dll文件 2.在命令提示符窗口中输入.dll文件的文件路径&#xff0c;…

干货:Android 源码使用心得分享

我相信很多初学者会和我一样经常在网上去找Android开发源码&#xff0c;但是往往因为运行不起来非常的懊恼&#xff01;在做爱开发网站的时候&#xff0c;收集App代码时就遇到了这种困难&#xff0c;我相信网络上面的源码大部分在发布前都会人工测试&#xff0c;能够正常运行才…

60分钟入门深度学习工具PyTorch

「免费学习 60 节公开课&#xff1a;投票页面&#xff0c;点击讲师头像」作者 | Soumith Chintala中文翻译、注释制作 | 黄海广配置环境&#xff1a;PyTorch 1.3&#xff0c;python 3.7&#xff0c;主机&#xff1a;显卡&#xff1a;一块1080ti&#xff1b;内存&#xff1a;32g…

Windows客户端C/C++编程规范“建议”——指针

2 指针 2.1 尽量使用智能指针 等级&#xff1a; 【推荐】说明&#xff1a;正确使用智能指针可以省去指针管理的工作。2.2 类成员变量指针释放后一定要置空 等级&#xff1a; 【必须】说明&#xff1a;如果类成员变量指针在释放后没有置空&#xff0c;将出现如下问题&#xff1…