我用正则去解析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());
    }}
请问这是为什么呢?以及如何避免这个问题?