深柳堂

windows下的正则式工具介绍之三:MTracer2.0介绍以及与RegexBuddy比较

RegexBuddy和PowerGrep是我在windows下常用的两款正则式工具。前者是帮助编写正则式的辅助工具,后者是进行批量搜索替换的实用工具。这两款软件都是外国人写的。今天介绍国人史寿伟先生写的一款正则式工具,MTracer 2.0。

 

MTracer 2.0软件版本

MTracer2.0全名是RegexMatchTracer,官方主页在regexlab.com。上面说最近更新日期是2007.10.07,不过,从我今天下载的程序的修改日期来看,是2008.09.13。变化是,之前作者提供的是绿色的程序,现在提供的是msi的安装包。 本文以下提到MTracer时,若无特殊说明,均指MTracer2.0。

 

MTracer软件特性

作为一款正则表达式撰写辅助程序,它拥有查找匹配、替换模式、分割模式,可以分别进行相应操作。前两种用的比较多,各种语言或正则式工具都有相应语句或函数来实现;第三种分割模式是指使用正则表达式来描述字符串的分割符,以便将字串分割成子串数组。举个简单的例子来说,可以使用正则式\d+;?abcd12;sdf55656asdfasd82asd33x字串分割成子串数组:

  • abcd
  • sdf
  • asdfasd
  • asd
  • x

在实际操作时,你总会遇到使用分割模式才能最有效率地解决的问题。

除了一般的选项(忽略大小写、单行\多行、全局),它提供了从右向左、扩展模式两种匹配选项。

从右向左:平时查找字串最右边的正则式匹配,可以借助于?$来定位。而在MTracer下,这款比较令人耳目一新的选项十分好玩,虽然我还没有在实际操作时遇到过确需此选项的例子。

扩展模式:包括如下选项:

  • 注释 (?#xxx):在正则式中加入注释以便提高可读性;
  • 模式修改符 (?ismg-ismg):小范围内修改匹配模式;
  • 非捕获组 (?:xxx):匹配而不捕获,便于计数,同时还可以节省内存,提高效率(根据《精通正则表达式》的说法);
  • 预搜索(零宽度断言):十分有用的匹配选项,只匹配位置,而不消耗字符;有四种模式,详见手册
  • 独立表达式 (?>pattern):此选项在《精通正则表达式》中,被余晟先生翻译为“固化分组”,即无论匹配成功与否,内部都不进行回退,都不会再次尝试匹配;
  • 条件表达式(?(x)y|z):与C语言的三目操作符类似,x条件为真则进行y匹配,否则进行z匹配。其中x部分有四种模式,详见手册
  • 递归表达式 (?R):对另一部分子表达式的引用,而不是对其匹配结果的引用。当被引用的表达式包含自身,则形成递归引用。

个人比较常用的选项是非捕获组和预搜索。

 

MTracer最有用的特性

相对于另一款正则式撰写辅助程序RegexBuddy而言,MTracer最有用的特性是中文的正则式分析树。虽然RegexBuddy也有此功能,但是MTracer的正则式分析树是中文的。这对于需要此功能但是不愿意使用英文软件的用户来说非常方便。对于初学者也很有帮助。

值得说明的是,正则式的中文术语在中文里还没有形成统一的规范。以我自身的阅读经历而言,似可分为两类:何伟平译的《Perl Programming》第三版中大量使用的正则式术语译法为第一套方案,余晟先生译的《精通正则表达式》第三版中使用的正则表达式为第二套。个人倾向于第二套。

MTracer使用的正则表达式术语,与这两套术语均有相异之处。

如果有人使用上述第二套术语将RegexBuddy汉化的话,估计在中国的普及率会大幅提高。题外话。

 

 

与RegexBuddy的简单比较

还是列表说明吧。

属性 MTracer RegexBuddy
界面语言 中文 英文
大小 471kb 9.1 MB
价格(单用户) 个人RMB49.00

公司RMB298.00
US$ 39.95
免费版的限制 正则式长度限制 7天免费使用时间
帮助文件 原来版本有,最新的msi版已经不带帮助文件;需要的话可以下载本站上传的手册 齐全。包括4本电子书,其中3本是关于正则表达式的教程、参考手册,1本是RegexBuddy的操作手册。十分翔实。语言是英文。
匹配模式
  1. 匹配
  2. 替换
  3. 分割
  1. 匹配
  2. 替换
  3. 分割
匹配选项
  1. 忽略大小写(开关)
  2. 单行、多行
  3. 全局局部可选
  4. 从右至左
  5. 扩展模式(详见上文)
  1. 忽略大小写 (开关)
  2. 单行、多行
  3. 默认全局
  4. 点号匹配新行
  5. ^$匹配换行符
  6. 空白字符宽松模式
  7. 扩展模式(依语言而定)
历史功能 “文本片断”即是 History
导出字串为指定语言
  1. 原状导出
  2. Visual Basic
  3. C/C++
  1. 原状导出
  2. C/C#
  3. Perl(m//或s///格式)
  4. Basic
  5. Java
  6. JavaScript
  7. Pascal
  8. PHP (//)
  9. PostgreSQL
  10. Python
  11. Ruby
  12. SQL
  13. Tcl
  14. XML
  15. 还包含在上述语言中如何调用该正则式的模块,功能强大、有用、好用。(Use)
常用正则库 帮助文件中有提及 程序中包含该功能,有定义、例代码、匹配实例。

帮助文件中也有。
扩展性 支持插件(疑安装目录下的stdplgin.dll是其插件,功能不详。) 与PowerGrep相关联。
帮助论坛 开放,地址在此 仅对付费注册软件的用户开放。
界面高度可定制 不支持 支持
是否支持批量替换外部文件 不支持 支持

当然,没有提到的功能、细节还不少,这里仅仅是列出本人关注的属性。

 

MTracer 2.0注册

付出劳动,换来报酬,是当今任何行业都认可的规则。MTracer需要注册费,这一点也十分正常。其价格是48元人民币。比起US$ 39.95的RegexBuddy来,可谓性价比极高。

如果不注册,会有什么限制呢?请看图。哦,是有100个字符的限制。

这是注册后的图。

对于未注册版本,平时写一些短小的正则式,是没有问题的。如果想无限制地使用该程序,花48元支持一下国产程序,何乐而不为?

现在无论主动还是被动,版权意识都在深入人心。这也是本人一直没有把完全版的RegexBuddy和PowerGrep的下载链接贴到blog上、而是采取来Email索取的原因之一。

MTracer2.0采用注册号的方式注册。看来作者深知在国内破解成风,于是很幽默地添加了这样一则菜单选项:如何8小时破解本软件?呵呵。8小时我们可以做许多事情,没有必要浪费在track、debug、crack上。你的时间很值钱的。

这两款软件的完全版我这里都有,如果需要RegexBuddy的话,请占击链接留下信箱索取即可;但是MTracer的话就不要索取了。

 

相关阅读

windows下的正则式工具介绍之一:RegexBuddy

windows下的正则式工具介绍之二:powergrep

6

如狐添翼:FireFox3正则表达式搜索插件/Find Bar/

原来在FireFox2.x中使用过一个插件FindBar,十分好用。升级到firefox3.0之后,FB居然冬眠。今天终于看到更新,能继续在firefox中使用了,心情超爽,特写日志以记之。

意译一下作者的介绍。插件主页、介绍原文在这里

——————-正则表达式分割线——————

/Find Bar/

/Find Bar/ is a new extension for Firefox that is still a little bit in progress. I’ve always believed that one of the best features of Firefox is it’s quick find bar. I probably use it about 20 times a day, if not more. But it has to be said its a fairly simple beast. When it comes to more powerful searches you’re just out of luck. This extension adds a whole new dimension to the find bar, regular expressions. The regular expressions are implemented using the JavaScript engine so check the JavaScript RegExp syntax for the full details.

/Find Bar/是FireFox的新插件,目前仍在完善中。对于firefox,我一直觉得它方便快捷的搜索栏是其亮点之一。我每天使用该功能20次以上。但是必须承认,其搜索功能太过薄弱。当你要搜索更复杂的内容时,它就无能为力了。

本插件为搜索栏添加了新选项:正则表达式。它使用了JavaScript正则式引擎。请查询JavaScript RegExp文档来了解语法细节内容。

有待解决的两个问题:

  • Whitespace. HTML is made up a lot of this, most of it is ignored by the browser and not visible on the page. At the moment this extension doesn’t ignore anything so you may find there are more spaces between words than you expected. Should I err on the side of accuracy as it is now, or collapse all whitespace?空白符(水平制表符、空格等)。HTML中包含了许多空白符,其中一大部分被浏览器忽略掉,不在页面上显示出来。目前该插件没有忽略任何字符,因此你会发现,单词之间往往有更多的空白符符。我是该精确地显示出每个空白字符呢,还是该将其全部压缩?
  • Block content. The standard find bar wont find searches that span blocks (paragraphs in human terms). This extension does, which while potentially useful also causes some issues. One thought is to make each paragraph like a line then you can use line breaks to match paragraphs as you might expect.区块内容。标准的搜索栏不会跨区块(亦即段落)搜索,而本插件搜索时却会跨越区块,这既是便利之处,但是也有可能带来副作用。一种思路是将每一段落处理为一个文本行,这样您就可以使用换行符来匹配段落。

该插件的兼容性

FireFox Firefox 2.0b1 - 3.1a2pre
ThunderBird Thunderbird 2.0 - 3.0a1

下载地址

/Find Bar/ Install v1.0.1

(Installs from addons.mozilla.org)

——————-正则表达式分割线——————

跨区块搜索我觉得不是大问题,对于空白字符,我的解决方法是,只要是使用正则表达式来搜索,就在使用空格时使用\s+来表示。这样,从内容上,它表示了任何种类的空白字符;从数量上,它表示了最少一个(多则不限)的空白字符,既不错杀,也无冤死。

由此引发的感慨是:人的眼睛所能看到的字符是有限的,其所看到内容与事实的真相有时未必相符。而程序是精确的,每一个比特都明察秋毫。(例如在汇编语言中的数字0与ASCII字符’0′就截然不同。虽然在perl中,两者单独出现时被视为是同一事物。)

该插件还能结合原搜索栏的全部高亮显示选项来显示,便于显示所有的匹配。在搜索英文等外语时,你会发现这一点十分有用。

另外有一点得陇望蜀的心思是,如果该插件支持保存常用搜索就好了。比方搜索email地址的、URL的,日期的,诸如此类。虽如此,这款插件已经十分好用,强烈推荐。

6

windows下的正则式工具介绍之二:powergrep

上文介绍了RegexBuddy,本文介绍另一款windows下的正则式软件:PowerGREP,号称“The Most Powerful GREP Tool for Windows”,windows下最强大的GREP工具。看清楚了,是最强大,而非之一。与RegexBuddy一样,也是商业软件,其售价为US$149.00,合人民币1000有奇。如果说RegexBuddy是撰写正则式的贴心助手,那么PowerGREP则是应用正则式在文本文件中搜索替换的强大工具。现在我们看看,它究竟有什么功能敢号称最强

基本界面

点击可以看大图。另外,还有一组图片来自powergrep官网,附上了官网的部分介绍,以及个人评论。

  • 内容搜索图片,点这里
    在本抓图中,我搜索了c:\My Documents\My Web Sites文件夹及其子目录下所有的html文件。我使用了一条正则表达式把搜索范围限定在HTML tag之内,使用另一条正则式在这些标记中搜索所有的email地址。

  • 搜索和替换,点这里这里
    一个好用的功能是可以预览结果而不是立即替换。匹配结果以黄色标出。双击匹配就能打开对应的文档并检验其内容。
    点击执行后,颜色改变,表示已经实施替换。

  • 收集信息和统计数据,点这里
    本例是“检测Apache网络日志--google search terms”的例子。本例使用的正则式在PowerGREP帮助文档中有详细讲解。

  • 灵活的“撤消”历史记录,让你不再抓狂,点这里
    在执行替换的同时,PowerGREP已经备份了原文件。只要你没有手动删除这些备份的文件,你可以随便撤消你做过的任何操作。世界上真有后悔药的呀。

  • 搜索PDF文档,点这里
    PDF也能使用正则式进行搜索?当然了,你没有看错。只是,要确保PDF文档中你要搜索的内容是文字而非图像。也就是说,扫描版的PDF不享受此功能的哟。

  • 在MS word 文档中搜索,点这里
    这个功能也十分有用。我记得还有个东东叫ViEmu for Word & Outlook,可以在word和outlook中模拟vim,当然可以使用正则式搜索替换了。不过,ViEmu一来也是收费软件(在2008年5月31日之前是79美刀,之后是99美刀),我还没有找到免费版本;二来其正则式是vim风格的,只习惯Perl风格的同学可能不太习惯。在google documents里也支持正则式搜索了,具体语法、风格尚未广泛测试。

  • 在MS Excel中搜索,点这里
    同样也是批量搜索、替换。不单单是对一个文档、一个sheet。

  • 以16进制模式,在2进制文档中搜索,点这里
    跟二进制编辑器界面类似,多了正则式批量搜索替换功能。

  • 在zip压缩文档中搜索,点这里
    把zip文件当作普通文件夹来搜索。很强大吧?

  • 正则表达式序列,点这里
    大多数正则式工具一次只支持一条正则式的操作。而PowerGREP可以一次执行多条正则式!使用checkbox来进行多项选择。

  • 定制颜色显示,点这里
    该功能比较一般。除非软件中的颜色设置特傻,一般我是不会改变默认颜色搭配的。

功能演示

PowerGREP官网还提供了一组flash做的demo,见下。

  • 使用正则式匹配email地址(2′47”)。点这里
  • 升级版权信息(3′38)。点这里
  • 与RegexBuddy的无缝链接(1′57”),点这里;两个软件是亲兄弟,当然哥俩好啦!
  • 文件选择(3′08”),点这里;PowerGREP提供了贴心的特性,来帮助你筛选需要的文档。
  • 其它特性(8′37”),点这里;总而言之,PowerGREP是功能强大。自己发掘吧!

软件下载

目前其最新版为3.4.2,更新于2008年1月18日。其官网为www.powergrep.com,可以去下载其最新版试用。该软件为商业软件

  • 如果你偶然路过,尝新而已,那只需下载试用版即可;
  • 如果你觉得好用、准备常用、手有余钱、非正版不用,不妨花美金购买;要花人民币1000多块哟^_^
  • 如果你喜欢它,同时你认为优秀的网络资源是应该和朋友免费分享的,从而想获得该软件的全功能免费版,好吧,我也成全你,请在本文后留言(附邮箱),我会把这个小东西的链接发给你(最新版为3.4.2,我手头的全功能版为3.3.3,也足够用了)。
6

windows下的正则式工具介绍之一:RegexBuddy

RegexBuddy

俗话说,工欲善其事,必先利其器。关于windows下的正则表达式工具,这里推荐的是:RegexBuddy和PowerGREP。在linux下,也有好用的正则表达式工具,例如grep的兄弟们,只不过是都是基于命令行的。而这两款windows下的小工具,其突出特点是可视化,允许尝试和预览,极大地方便了使用者。

RegexBuddy:网址是http://www.regexbuddy.com。在编写正则式时,它提供可视化的支持、提示、调试方面的便利;在使用正则表达式时,它无私地将正则式转换为多种语言的字串,还提供了代码输出功能。正则式助手,该称号名副其实。

基本界面

正则式的基本功能无外乎搜索和替换。在本文中,我们使用匹配Email的正则式,代码如下:

\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

此时,RegexBuddy的界面如图:

regex001

在点击“Explain Token”时,能对当前的正则式片断的作用作出详细解释,例如当你把光标移动到\b上再点击Explain Token,就会激活帮助文档,自动定位到Word Boundaries这一段。

如果想对刚才编写的这条正则式进行测试和验证,可以点击“Test”进行测试。这时,在下边的文本框输入所需要匹配测试的文字,例如dog@animals.com,匹配结果就以黄色背景色标出。在本例中,你或许没有得到正确的匹配,呵呵,那是正常的。为什么?答案见文章结尾。

regex002

拷贝粘贴

RegexBuddy能把正则式以多种字符串格式拷贝出来。还是刚才那条正则式,根据需要,它可以被拷贝为:

'\\b[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b'    
"\\b[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b"     
'/\\b[A-Z0-9._%-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b/i'

具体的选项在copy菜单里,如下图所示。你不必为单双引号、正反斜线操心了。

regex004_menu

在paste菜单项中也有类似应用,不赘述。

正则式->代码

如果你想把刚才编写好的正则式应用在程序中,这里还有一个选项:Use,界面见下图:

regex004_use

在上面的match和replace之间点击,其代码也相应自动调整;当选取不同的language时,代码也会相应调整。它支持的语言格式为:

  • C#
  • Delphi(NET/Win32)
  • Java/JavaScript/ECMAScript
  • PCRE
  • PHP
  • Perl
  • Python
  • RealBasic
  • Ruby
  • VB

另外,它还有function选项,分别用以实现下述功能:

  • If/else branch whethe the regex matches (part of) a string. If/else验证正则式是否匹配字串(的一部分)。 最常用的功能。
  • If/else branch whethe the regex matches a string entirely. If/else验证正则式是否匹配整条字串。
  • Get the part of a string matched by the regex. 取得字串中与正则式匹配的部分。Get the part of a string matched by a capturing group. 取得字串中所匹配的捕获组。这一条我也是刚刚知道,很有用哟。
  • Get an array of all regex matches in a string.将字串中所有的匹配保存到数组中。
  • Iterate over all matches in a string。列出字串中所有的匹配项。(例如,在使用正则式’\w’来匹配字串’abc’时,本function列出的内容为’a',’b',’c’.)。单词iterate的含义是重复
  • Comment with RegexBuddy’s regex tree. RegexBuddy的正则树的注释。

文本分割split

如果需要处理的文本是以某种分隔符隔开的,而该种分隔符恰好又能使用正则式描述,(例如html标签),此时regexbuddy的split功能就可以大显身手了。我随便打开了一个饭否网页,对其源代码中的消息部分(<div id=“stream”>与</div>之内)的文本进行了处理,使用如下正则式删除了所有的尖括号内容,只留下普通文本。

使用的正则式为:

<[^>]+>

软件界面以及运行结果请见下图。



结尾:

关于本文开头提出的小问题,细心的你或许一下子就能看出答案了!见下图:

regex003

只要选中Case insensitive选项中OK啦!如果你没有找到,或许是因为该软件是英文的,一时间您没有注意到该选项;或者您对正则式还不太熟悉。

软件下载

上文已经提到,其官网为www.regexbuddy.com,可以去下载其最新版试用。该软件为商业软件

  • 如果你偶然路过,尝新而已,那只需下载试用版即可;
  • 如果你觉得好用、准备常用、手有余钱、非正版不用,不妨花美金购买
  • 如果你喜欢它,同时你认为优秀的网络资源是应该和朋友免费分享的,从而想获得该软件的全功能免费版,好吧,我也成全你,请在本文后留言(附邮箱),我会把这个小东西的链接发给你(最新版为3.1.1,我手头的全功能版为3.1.0,也足够用了)。

下篇文章将要介绍另一款regex工具:PowerGREP,敬请期待。

本文为rex.zhasm原创,原文地址在http://iregex.org/blog/y2008/m04/d30/regexbuddyregexbuddy.html,可以在遵循CC协议的条件下转载。

6