由正则式反推文本:REExtractor

February 2nd, 2010 Categories: 应用

发现一款简单有趣的正则表达式应用:REExtractor,作用是输入正则表达式,输出符合正则式描述的文本。作者给的介绍是
Generate all possibilities of Regular Expression,即生成正则表达式的所有可能性。不过,理论上可以做到,执行时却有限制。

一些限制

  1. 平台是GAE,语言是python,因此用的是python正则。或需代理才能访问使用。
  2. 支持的元字符或缩写:(), [],{m,n},{n},|,\w,\d。如果需要用到这些字符的字面值,请使用反斜线转义之。其中这里的\w等同于[a-zA-Z0-9],为62个字符之一,而不是通常意义上的包括下划线在内的[_a-zA_Z0-9],63字符之一。但是可以用[_\w]来代替,没问题的。
  3. 不支持的元字符:.(点号),^,$,\b,\D,\W,\1…(后向引用), (?=…), (?!…), (?<=…), (?<!…)等。
    • 如果出现.点号,则直接输出。
    • 如果使用^, $, \b, \1, (?=…), (?!…), (?<=…), (?<!…), 程序无视之。
    • 如果使用\D或\b或[^],则程序会报错。原因是范围太宽。
  4. 不支持可能性在1000条以上结果的正则表达式。例如,\w{2},因为它的可能性是62×62。但是你可以使用\w\d,因为它的可能性是62×10。

它能做什么

我爱正则表达式|由正则式反推文本
好吧,虽然限制多多,但是你仍然可以拿它来做一些有趣的应用。下面略举两例。

  • 生成一些简单的邮箱地址。试一下这条正则式:[abc]{3}\d@1(26|63).com ,它生成540条邮箱地址。
  • 生成一些人名。试一下这条正则式:张[小大勇赞强战海][虎猫龙彪平]。它生成35条人名。是的,它支持中文,并且每个中文字都可以当成一个字符来应用。如果你家要添一个宝宝,可以将一些可能的字排列一下,看看哪些组合比较赏心、顺口,再从中选择一个。

平心而论,上面的这些小应用,当然可以直接编程实现,限制更少,更灵活,更强大。但是有必要每次都开编译器么?尝试一下这款小程序,也挺有趣的。而且,上一节中提及的一些限制,其实也是蛮有道理的。毕竟从正则式反推文本,用不到大多数的零宽断言(不过\1这种反向引用应该挺常用的,却不支持)。当作一个小玩具就好。

Tags: , ,

2 Responses to “由正则式反推文本:REExtractor”

  1. February 3rd, 2010 at 00:12
    1

    测试造数据不错 哈哈哈

    [Reply]

  2. February 5th, 2010 at 19:38
    2

    有源码吗?怎么实现的?

    [Reply]

Leave a Comment