java.util.regex提供了的对正则表达式的支持,但是感觉效率不是很高..不排除是我表达式写的不好..想问下相比.net或者c++,java自带的这个类库的效率如何?
我看有些第三方的正则表达式的java类库,不知道有没有效率更高点的...我现在用java自带的这个,解析的时候cpu基本占满,而且消耗时间也比较长.
谁能给点改进的建议?谢谢

解决方案 »

  1.   

    没有http://hi.baidu.com/jingleq/blog/item/7bc39b62b61839dce7113a54.html
      

  2.   

    不清楚有沒有
    不過沒覺得regex效率低呀?
    我想問下你的el一般長度是多少?超過20個單位的長度么?
      

  3.   

    一般正则的实现都可能来自于GNU的实现,但是.Net的显然不会是的,那肯定是MS自己写的,MS的代码往往都是效率高的。
    这些都是都是考虑开源问题的。
      

  4.   

    知道有些..至于效率..不清楚
    你去apache看看...
      

  5.   


    java的正则速度还算很快吧,因为有过自己写的原以为很快了,结果用正则发现要快不少

    解析的时候cpu基本占满......这个不是问题吧???CPU多少是操作系统调度问题吧,再说了占满才能速度快啊。
    另外你说的时间长,最好也说一下数据量多少,你的正则啥样啊,要不怎么判断。
      

  6.   

    NFA 的实现是比较慢,如果你的正则表达式太占内存和速度的化,
    需要从正则表达式本身进行优化,尽量减少回溯和无穷匹配的次数。
      

  7.   

    尽量少用选择结构(选择结构对 NFA 的效率影响是很大的),不需要捕获时采用非捕获组,
    适时地使用 + 侵占量词,比如 (?:june|july) 尽量写成 ju(?:ne|ly),\d{3} 可以写
    成 \d\d\d 等等之类的,具体的优化可以看看 Mastering Regular Expressions 一书。至于其他的正则库基本上都是采用 NFA 引擎的,与 Java 中的性能区别是不大的,而且与
    其他语言的性能区别也不是很大的。据 Mastering Regular Expressions 上所说 Tcl 是采用 NFA 和 DFA 混合引擎的,
    它是经过精心设计的,根据不同的表达式选择不同的引擎,这无疑是最优秀的。
      

  8.   

    我找到了apache的oro,但是有的地方搞不太懂...
    我的正则表达式用零宽段言用得比较多,大概形式是这类的:(?<=类((\\s*)|[ ]*)(型|别)(:|:|\\s|[ ])).*另外问下oro里用不了"?<=exp"么,但是"?=exp"可以用啊.