delphi没有内置正则模块所以我们在delphi中使用正则只能借助三方组件了 因为一个产品中需要频繁使用正则替换所以写了一个测试程序,用来比较到底哪种正组件效率最高 相信很多人都知道TPerlRegEx吧?他是免费开源的 这个组件使用的人比较多,然而这个组件却是速度最慢,效率最差的一个 可能是在d2009中的性能比较差吧,别的版本没有试过 TPerlRegEx的一些用法可以看看这里http://www.cnblogs.com/del/archive/2007/12/21/1009482.html  另外一个组件是TRegExpr这个组件总体来说速度还算可以,功能还算比较全,推荐使用,也是免费开源的  而也有一些人使用的是Ms 的RegExp组件,但这个组件需要在delphi注册控件,而且在程序里一直会使用别人的dll感觉很别扭,不过总体来说ms的正则组件性能是相对高的了,但他功能也不是很全,比如他不支持根据匹配结果的条件替换,如果你对软件的性能要求高又不想花钱,那么建议你使用他  另外一个就是商业软件了,他的性能与功能都是没得说的,从各方面测试他都是最高效的 我写的测试程序中因为使用了回调机制的Replace所以看上去他没有ms的regexp速度快,但如果也使用Replace全部的话那速度会比ms的regexp快那么一点 另外因为篇幅有限就直接给大家下载源码了  TPerlRegEx:http://www.regular-expressions.info/download/TPerlRegEx.zip TRegExpr:http://regexpstudio.com/TRegExpr/TRegExpr.html DIRegEx:http://www.yunqa.de/delphi/doku.php/products/regex/index?DokuWiki=564g8fvcqg5lkso0fbcncv86c1  测试源码:http://www.17benteng.com/soft/delphi_RegEx_Test.rar 注意:些测试中的TRegExpr是我修改过的,不过不影响正常使用

解决方案 »

  1.   

    目前我使用D7 for TRegExpr 而且有支援Unicode
    但是D2009無法編譯
      

  2.   

     TRegExpr 还是可以的,推荐使用,功能还算全
      

  3.   

    回4楼,这个工程本身就是delphi2009的,其它的没有试过
      

  4.   

    最新UniSynEdit中带的TRegExpr是可以支持Delphi2009和UNICODE的。
      

  5.   

    用TPerlRegEx
    怎么替换无效呢?string s = "某某的面积是12345678平方米";
    string t = Regex.Replace(s, @"(?<=\d)(?=(\d\d\d)+(?!\d))", ",");
    Console.WriteLine(t); //输出:某某的面积是12,345,678平方米转换为Delphiprocedure TForm3.btnPostClick(Sender: TObject);
    var
      reg: TPerlRegEx;
    begin
      reg := TPerlRegEx.Create();
      reg.Subject := mmoStr.Lines.Text;//输入  某某的面积是12345678平方米
      reg.RegEx   := mmoRegex.Lines.Text;//输入  (?<=\d)(?=(\d\d\d)+(?!\d))
      reg.Replacement := ',';
      reg.ReplaceAll;
      mmoResult.Lines.text:= reg.Subject; //输出结果仍然是 某某的面积是12345678平方米
    end;