我想找到一個合適的正則表達式來解析robots.txt文件。Java正則表達式解析/robots.txt
所以我在做什麼,走的頁面,看起來像這樣的字符串,例如:
User-agent: *
Disallow: /a
Disallow: /b/c
Disallow: /d/c/h
User-agent: agent1
Disallow: /a1/c1
Disallow: /b1/d1
User-agent: agent2
Disallow: /a2/c2
Disallow: /b2/d2
所以我試圖做的是建立一個正則表達式,以便對每個用戶代理名稱(*,agent1,agent2)及其Disallow列表。
這裏是代碼我試過,但我沒有得到我的期望:
public void parseRobotsTxt() {
String website = "http://http://www.EXAMPLE.com";
String content = PageUtils.getStringSource(website + "/robots.txt");
Pattern pattern = Pattern.compile(".*?User-agent:(.*?)(Disallow:(.*?))",Pattern.DOTALL);
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
System.out.println("The user agent:" + matcher.group(1));
System.out.println("Disallow List: ");
System.out.println("The user agent:" + matcher.group(2));
System.out.println("----------------------");
}
}
不幸的是我得到的結果是
The user agent: *
Disallow List:
Disallow:
----------------------
The user agent: agent1
Disallow List:
Disallow:
----------------------
The user agent: agent2
Disallow List:
Disallow:
----------------------
我收到代理的名稱,但不禁止列表。
難道不是更容易:拆分換行 - 檢查第一行以'User-agent:'開始並提取它 - 而行以'Disallow'開頭添加它們到你的記錄 - 當滿足空行時,開始新的記錄? –
不會String#分裂會更容易嗎?您可以獲取每個用戶代理的數組並解析剩餘的文本。 –
原諒我的貪婪,但[「兩個問題」引用](http://regex.info/blog/2006-09-15/247)在這裏似乎相關。這種分析很容易完成,沒有正則表達式。 – VGR