我想找到一个合适的正则表达式来解析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