正则匹配时间很长
我用正则去解析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());
}
}
请问这是为什么呢?以及如何避免这个问题?
...全文
相关推荐
C++之字符替换(基于正则检验)
基于C++的字符替换例程。通过正则表达式实现,而非遍历替换,降低了时间复杂度。代码更高效
JS正则RegExp.test()使用注意事项(不具有重复性)
主要介绍了JS正则RegExp.test()使用注意事项,结合实例形式分析了RegExp.test()方法的功能与用法,以及针对不能重复调用的解决方法,需要的朋友可以参考下
电话号或者手机号验证
电话号或者手机号验证很好用可以试试,我都很长时间用它
everything软件快速搜索工具非常好用
everything快速搜索工具,非常好用,电脑全盘搜索,急速找到。
C++字符串分割方法[可运行源码]
本文详细介绍了在C++中实现字符串分割函数split()的四种方法。首先,使用stringstream流和getline函数,通过指定分隔符将字符串分割成子串。其次,利用string类的find和substr方法,支持单个字符或字符串作为分隔符。第三种方法使用C库函数strtok,但需要注意其线程安全问题。最后,通过正则表达式和regex_token_iterator实现灵活的分割。每种方法均附有代码示例和测试用例,便于理解和实践。


Java SE
