正则表达式Java,为什么此正则表达式这么慢?

吉耶

我刚刚用Java创建了一个正则表达式,我想在大约5000条推文中查找表达式,每条推文几乎要花一秒钟,为什么这么慢?

如果该表达式太复杂或执行某项操作的成本太高?我希望可以在不到5秒的时间内处理整个数据。

代码是:

public class RegularExpression {
    public static void main(String[] args) throws IOException {                
        String filter = ".*\"created_at\":\"(.*?)\".*\"content\":\"(.*?word.*?)\",\"id\".*";       
        Pattern pattern = Pattern.compile(filter);
        List<String> tweets = FileUtils.readLines(new File("/tmp/tweets"));

        System.out.println("Start with " + tweets.size() );
        int i=0;
        for (String t : tweets){

            Matcher matcher = pattern.matcher(t);                      
            matcher.find();            
            System.out.println(i++);

        }
        System.out.println("End");
    }
}

输入是JSON tweets。如果我简化我的RE,它的运行速度会更快,但是,我认为我的RE并不那么繁重。我想了解为什么会这样,我只是在检查测试。

更新:

我尝试解析JSON时使用RE的原因是,最后,我可以从任何类型的服务器中获取简单的文本和XML(JSON格式)日志。因此,我必须像纯文本一样处理我的输入。

Pietzcker团队

您的正则表达式在允许匹配的内容上非常不精确。最重要的是,您似乎想在引号之间匹配文本,但是您允许引号字符成为匹配项的一部分(.*可以并且将很高兴匹配"!)。这使您有可能在声明失败/成功之前,正则表达式引擎必须检查大量的排列,具体取决于您的输入。

如果实际上引号可能不是您当前与之匹配的文本的一部分.*,则使用[^"]*应该可以大大加快速度:

"[^\"]*\"created_at\":\"([^\"]*)\"[^\"]*\"content\":\"([^\"]*word[^\"]*)\",\"id\"[^\"]*"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么正则表达式匹配这么慢

来自分类Dev

为什么C ++ 11正则表达式(libc ++实现)这么慢?

来自分类Dev

为什么我的Python正则表达式模式运行这么慢?

来自分类Dev

为什么此正则表达式要花这么长时间执行?

来自分类Dev

为什么此正则表达式要花这么长时间执行?

来自分类Dev

为什么此正则表达式匹配真假?

来自分类Dev

为什么此正则表达式与结尾>

来自分类Dev

为什么此正则表达式不匹配?

来自分类Dev

为什么此正则表达式不匹配?

来自分类Dev

为什么此正则表达式无效?

来自分类Dev

为什么此正则表达式匹配?

来自分类Dev

为什么此正则表达式与结尾>

来自分类Dev

为什么此范围的正则表达式失败?

来自分类Dev

为什么此正则表达式匹配/ \ w + [^(] /?

来自分类Dev

为什么此正则表达式匹配?

来自分类Dev

为什么此正则表达式匹配?

来自分类Dev

为什么此正则表达式通过?

来自分类Dev

为什么此正则表达式逻辑失败?

来自分类Dev

为什么此正则表达式不匹配?

来自分类Dev

正则表达式匹配慢

来自分类Dev

正则表达式-为什么此正则表达式不能在Python中工作?

来自分类Dev

此正则表达式的说明

来自分类Dev

为什么Java无法识别此正则表达式?

来自分类Dev

为什么Java无法识别此正则表达式?

来自分类Dev

此正则表达式中\\ +的含义是什么?

来自分类Dev

此正则表达式替换什么?

来自分类Dev

了解什么使此正则表达式如此缓慢

来自分类Dev

当我告诉我不是正则表达式时,为什么这么贪婪?

来自分类Dev

Java正则表达式-组合表达式