首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

正则婚配时间很长

2013-08-04 
正则匹配时间很长我用正则去解析Nginx的Accesslog,遇到一些异常日志时,正则匹配过程就会很长,相当于程序挂

正则匹配时间很长
我用正则去解析Nginx的Accesslog,遇到一些异常日志时,正则匹配过程就会很长,相当于程序挂起了:


import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class App {

    public static void main(String[] args) {

        Pattern ptrn = Pattern.compile("(.*?) (.*?) (.*?) (.*?) (.*?)  \\[(.*?)\\] " +
                                       "(.*?) "(.*?) (.*?) (.*?)" (.*?) (.*?) " +
                                       ""(.*?)" "(.*?)" "(.*?)" "(.*?)" - "(.*?) (.*?)"");
        String log = ", 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2, 10.10.3.23, 10.10.6.2" - "10.10.6.2:80 -"";


        System.out.println("Matching start");
        Matcher matcher = ptrn.matcher(log);
        System.out.println(matcher.matches());
    }

}



请问这是为什么呢?以及如何避免这个问题?
[解决办法]
正则本来就性能不高,尽量简短一些比较好。
[解决办法]
(.*?) (.*?) (.*?) (.*?) (.*?)
这是要干啥?
[解决办法]
正则婚配时间很长楼主这是想匹配什么呢?
[解决办法]
这正则得要回溯多少次啊。。

热点排行