我想从日志文件中提取某些URL。但是我只想提取排名为1或2的那些查询。日志文件包含一个colum itemRank,给出排名。
到目前为止,我能够通过浏览文本来提取某些URL。但是我不知道如何实现只单击URL或单击URL的条件。

例如,这是部分日志文件的样子:

(列为ID,日期,时间,RANK,URL)


763570 2006-03-06 14:09:48 2 http://something.com

763570 2006-03-06 14:09:48 3 http://something.com


在这里,我只想提取第一个查询,因为它的排名为2。



到目前为止,这是我的代码:

public class Scanner {

    public static void main(String[] args) throws FileNotFoundException {


        File testFile = new File ("C:/Users/Zyaad/logs.txt");
        Scanner s = new Scanner(testFile);
        int count=0;

        String pattern="http://ontology.buffalo.edu";
        while(s.hasNextLine()){
            String line = s.nextLine();

            if (line.contains(pattern)){
                count++;

                System.out.println(count + ".query: " );
                System.out.println(line);
            }

        }   System.out.println("url was clicked: "+ count + " times");

        s.close();

        }
}


我应该怎么做才能打印出1.查询?我试过像[\t\n\b\r\f] [1,2]{1}[\t\n\b\r\f]这样的正则表达式,但这没用。

最佳答案

一个简单的(可能是简单的)方法是:


确定您要查找的电话号码(严重性?)
确定网址的起始格式




// assume this is the file you're parsing so I don't have to repeat
// the whole Scanner part here
String theFile = "763570 2006-03-06 14:09:48 2 http://something2.com\r\n" +
        "763570 2006-03-06 14:09:48 3 http://something3.com";
//                           | your starting digit of choice
//                           | | one white space
//                           | | | group 1 start
//                           | | | | partial protocol of the URL
//                           | | | |  | any character following in 1+ instances
//                           | | | |  | | end of group 1
//                           | | | |  | |
Pattern p = Pattern.compile("2\\s(http.+)");
Matcher m = p.matcher(theFile);
while (m.find()) {
    // back-referencing group 1
    System.out.println(m.group(1));
}


输出量

http://something2.com


注意

通常建议不要使用正则表达式来解析日志文件。

长期实施自己的解析器并将项目标记为对象的属性(我假设每行1个),然后根据需要进行操作,可能会更好。

关于java - 解析日志文件以提取查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23747369/

10-12 17:29