我看有些第三方的正则表达式的java类库,不知道有没有效率更高点的...我现在用java自带的这个,解析的时候cpu基本占满,而且消耗时间也比较长.
谁能给点改进的建议?谢谢
13 个解决方案
#1
没有
http://hi.baidu.com/jingleq/blog/item/7bc39b62b61839dce7113a54.html
http://hi.baidu.com/jingleq/blog/item/7bc39b62b61839dce7113a54.html
#2
不清楚有沒有。。。
不過沒覺得regex效率低呀?
我想問下。。。你的el一般長度是多少?超過20個單位的長度么?
不過沒覺得regex效率低呀?
我想問下。。。你的el一般長度是多少?超過20個單位的長度么?
#3
一般正则的实现都可能来自于GNU的实现,但是.Net的显然不会是的,那肯定是MS自己写的,MS的代码往往都是效率高的。
这些都是都是考虑开源问题的。
这些都是都是考虑开源问题的。
#4
to yami251139:
el是什么?
el是什么?
#5
#6
知道有些..至于效率..不清楚
你去apache看看...
你去apache看看...
#7
java的正则速度还算很快吧,因为有过自己写的原以为很快了,结果用正则发现要快不少
。
解析的时候cpu基本占满......这个不是问题吧???CPU多少是操作系统调度问题吧,再说了占满才能速度快啊。
另外你说的时间长,最好也说一下数据量多少,你的正则啥样啊,要不怎么判断。。。。
#8
NFA 的实现是比较慢,如果你的正则表达式太占内存和速度的化,
需要从正则表达式本身进行优化,尽量减少回溯和无穷匹配的次数。
需要从正则表达式本身进行优化,尽量减少回溯和无穷匹配的次数。
#9
那就用DFA
#10
尽量少用选择结构(选择结构对 NFA 的效率影响是很大的),不需要捕获时采用非捕获组,
适时地使用 + 侵占量词,比如 (?:june|july) 尽量写成 ju(?:ne|ly),\d{3} 可以写
成 \d\d\d 等等之类的,具体的优化可以看看 Mastering Regular Expressions 一书。
至于其他的正则库基本上都是采用 NFA 引擎的,与 Java 中的性能区别是不大的,而且与
其他语言的性能区别也不是很大的。
据 Mastering Regular Expressions 上所说 Tcl 是采用 NFA 和 DFA 混合引擎的,
它是经过精心设计的,根据不同的表达式选择不同的引擎,这无疑是最优秀的。
适时地使用 + 侵占量词,比如 (?:june|july) 尽量写成 ju(?:ne|ly),\d{3} 可以写
成 \d\d\d 等等之类的,具体的优化可以看看 Mastering Regular Expressions 一书。
至于其他的正则库基本上都是采用 NFA 引擎的,与 Java 中的性能区别是不大的,而且与
其他语言的性能区别也不是很大的。
据 Mastering Regular Expressions 上所说 Tcl 是采用 NFA 和 DFA 混合引擎的,
它是经过精心设计的,根据不同的表达式选择不同的引擎,这无疑是最优秀的。
#11
我找到了apache的oro,但是有的地方搞不太懂...
我的正则表达式用零宽段言用得比较多,大概形式是这类的:(?<=类((\\s*)|[ ]*)(型|别)(:|:|\\s|[ ])).*
另外问下oro里用不了"?<=exp"么,但是"?=exp"可以用啊.
我的正则表达式用零宽段言用得比较多,大概形式是这类的:(?<=类((\\s*)|[ ]*)(型|别)(:|:|\\s|[ ])).*
另外问下oro里用不了"?<=exp"么,但是"?=exp"可以用啊.
#12
java 里的正则表达式还没用过呢。
帮顶了
帮顶了
#13
2楼给的帖子挺好的
#1
没有
http://hi.baidu.com/jingleq/blog/item/7bc39b62b61839dce7113a54.html
http://hi.baidu.com/jingleq/blog/item/7bc39b62b61839dce7113a54.html
#2
不清楚有沒有。。。
不過沒覺得regex效率低呀?
我想問下。。。你的el一般長度是多少?超過20個單位的長度么?
不過沒覺得regex效率低呀?
我想問下。。。你的el一般長度是多少?超過20個單位的長度么?
#3
一般正则的实现都可能来自于GNU的实现,但是.Net的显然不会是的,那肯定是MS自己写的,MS的代码往往都是效率高的。
这些都是都是考虑开源问题的。
这些都是都是考虑开源问题的。
#4
to yami251139:
el是什么?
el是什么?
#5
#6
知道有些..至于效率..不清楚
你去apache看看...
你去apache看看...
#7
java的正则速度还算很快吧,因为有过自己写的原以为很快了,结果用正则发现要快不少
。
解析的时候cpu基本占满......这个不是问题吧???CPU多少是操作系统调度问题吧,再说了占满才能速度快啊。
另外你说的时间长,最好也说一下数据量多少,你的正则啥样啊,要不怎么判断。。。。
#8
NFA 的实现是比较慢,如果你的正则表达式太占内存和速度的化,
需要从正则表达式本身进行优化,尽量减少回溯和无穷匹配的次数。
需要从正则表达式本身进行优化,尽量减少回溯和无穷匹配的次数。
#9
那就用DFA
#10
尽量少用选择结构(选择结构对 NFA 的效率影响是很大的),不需要捕获时采用非捕获组,
适时地使用 + 侵占量词,比如 (?:june|july) 尽量写成 ju(?:ne|ly),\d{3} 可以写
成 \d\d\d 等等之类的,具体的优化可以看看 Mastering Regular Expressions 一书。
至于其他的正则库基本上都是采用 NFA 引擎的,与 Java 中的性能区别是不大的,而且与
其他语言的性能区别也不是很大的。
据 Mastering Regular Expressions 上所说 Tcl 是采用 NFA 和 DFA 混合引擎的,
它是经过精心设计的,根据不同的表达式选择不同的引擎,这无疑是最优秀的。
适时地使用 + 侵占量词,比如 (?:june|july) 尽量写成 ju(?:ne|ly),\d{3} 可以写
成 \d\d\d 等等之类的,具体的优化可以看看 Mastering Regular Expressions 一书。
至于其他的正则库基本上都是采用 NFA 引擎的,与 Java 中的性能区别是不大的,而且与
其他语言的性能区别也不是很大的。
据 Mastering Regular Expressions 上所说 Tcl 是采用 NFA 和 DFA 混合引擎的,
它是经过精心设计的,根据不同的表达式选择不同的引擎,这无疑是最优秀的。
#11
我找到了apache的oro,但是有的地方搞不太懂...
我的正则表达式用零宽段言用得比较多,大概形式是这类的:(?<=类((\\s*)|[ ]*)(型|别)(:|:|\\s|[ ])).*
另外问下oro里用不了"?<=exp"么,但是"?=exp"可以用啊.
我的正则表达式用零宽段言用得比较多,大概形式是这类的:(?<=类((\\s*)|[ ]*)(型|别)(:|:|\\s|[ ])).*
另外问下oro里用不了"?<=exp"么,但是"?=exp"可以用啊.
#12
java 里的正则表达式还没用过呢。
帮顶了
帮顶了
#13
2楼给的帖子挺好的