doctor_access_log.1177977600:65.55.210.14 - - [01/May/2007:00:00:26 -0500] "GET /estil.strawn HTTP/1.0" 404 14006
71.86.225.114 - - [23/May/2007:11:39:29 -0500] "GET /healthlink.css HTTP/1.1" 200 1799两行字符串如上面那样
现在要匹配IP, 方括号中的时间,以及后面的链接如“/healthlink.css HTTP/1.1”我自己写的匹配不到IP和时间达人帮我写一个,谢谢了

解决方案 »

  1.   

    import java.util.regex.*;public class LogAnalyze {
    public static void main(String args[]){
    String str ="doctor_access_log.1177977600:65.55.210.14 - - [01/May/2007:00:00:26 -0500] \"GET /estil.strawn HTTP/1.0\" 404 14006 71.86.225.114 - - [23/May/2007:11:39:29 -0500] \"GET /healthlink.css HTTP/1.1\" 200 1799 ";

    String regex = "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\s-\\s-\\s\\[([^\\]]+)\\]";

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

    while(matcher.find()){
    System.out.println("IP:\n"+ matcher.group(1));
    System.out.println("Time:\n"+ matcher.group(2));
    System.out.println();
    }
    }
    IP:
    65.55.210.14
    Time:
    01/May/2007:00:00:26 -0500IP:
    71.86.225.114
    Time:
    23/May/2007:11:39:29 -0500
      

  2.   


    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class TestReg {
    public static void main(String[] args) {
    String str = "doctor_access_log.1177977600:65.55.210.14 - - [01/May/2007:00:00:26 -0500] \"GET /estil.strawn HTTP/1.0\" 404 14006 71.86.225.114 - - [23/May/2007:11:39:29 -0500] \"GET /healthlink.css HTTP/1.1\" 200 1799 ";
    String regIp = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
    String regTime = "\\[(.[^\\s]*)";
    String regHeader = "\"(.[^\"]*)\"";
    Pattern pattern = Pattern.compile(regIp);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
    System.out.println("IP = " + matcher.group());
    } pattern = Pattern.compile(regTime);
    matcher = pattern.matcher(str);
    while (matcher.find()) {
    System.out.println("Time = " + matcher.group(1));
    } pattern = Pattern.compile(regHeader);
    matcher = pattern.matcher(str);
    while (matcher.find()) {
    System.out.println("Header = " + matcher.group(1));
    } }
    }IP = 65.55.210.14
    IP = 71.86.225.114
    Time = 01/May/2007:00:00:26
    Time = 23/May/2007:11:39:29
    Header = GET /estil.strawn HTTP/1.0
    Header = GET /healthlink.css HTTP/1.1