Android Java / Native C快速/慢速正则表达式

时间:2013-07-26 07:06:22

标签: android regex performance

我对Android平台上的正则表达式有疑问。最近我尝试用java实现它们,但java实现有点慢。过了一段时间,我决定把它带到一个新的水平,并在NDK的native-c平台上实现它们,我想我将获得巨大的性能提升。看来我错了。 (实际上C代码的工作速度比java快2-3倍)

以下是我用于搜索姓名的代码:

爪哇:

 Pattern pattern = Pattern.compile(regex);
 Matcher matcher;

 matcher = pattern.matcher(name);

 if(matcher.find()) {
     // get positions
     s = matcher.start();
     e = matcher.end();

     temp = new SearchedStruct();
     temp.position = i;
     temp.position_word = s;
     temp.position_word_end = e;

     listFound.add(temp);
 }

C :(我跳过很长一段时间,我编译te正则表达式并获得名称......)

regRes = regexec(&regex, name, nmatch, &match_ptr, 0);
if(!regRes) { // we got a match! }

正则表达式有点长,例如: Java的:      “(一个\ s * | b \ S * | C \ S * | 2个\ S *)(d \ S * |电子\ S * | F \ S * | 3个\ S *)(一个\ s * | b \ S * | C \ S * | 2个\ S *)(d \ S * |电子\ S * | F \ S * | 3个\ S *)“

C:      “(a([\ t' - ]) | b([\ t' - ]) | c([\ t' - ]) | 2([\ t'-] ))(p([\ t' - ]) | q([\ t' - ]) | r([\ t' - ]) | s([ \ t' - ]) | 7([\ t' - ])*)“

使用Java搜索1000个名称的时间大约为100-300毫秒,使用C代码搜索大小为500-1000毫秒。

为什么C正则表达式引擎比Java Matcher慢2-3倍?因为我预计C正则表达式要快得多(快3-4倍)

0 个答案:

没有答案