J'essaie de trouver une regex correcte pour analyser un fichier robots.txt.Java regex pour analyser /robots.txt
Alors ce que je fais est de prendre la page dans une chaîne qui ressemble à celui-ci par exemple:
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
Donc ce que je suis en train de faire est de créer un regex à prendre pour chaque utilisateur -agent le nom de l'agent (*, agent1, agent2) et sa liste Disallow.
Voici le code que je l'ai essayé, mais je ne reçois pas ce que je pense:
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("----------------------");
}
}
Malheureusement, le résultat que je reçois est
The user agent: *
Disallow List:
Disallow:
----------------------
The user agent: agent1
Disallow List:
Disallow:
----------------------
The user agent: agent2
Disallow List:
Disallow:
----------------------
Je reçois le nom de l'agent, mais pas la liste des interdictions.
Ne serait-il plus facile à Split par saut de ligne - vérifier que la première ligne commence par 'User-agent:' et extraire - tandis que les lignes commencent par 'Disallow' les ajouter à votre dossier - quand une ligne vide est rencontrée, commencez un nouvel enregistrement? –
Est-ce que le split # String ne serait pas plus facile? Vous pouvez obtenir un tableau de chaque agent utilisateur et analyser le texte restant. –
Pardonnez mon glibness, mais la ["deux problèmes" citation] (http://regex.info/blog/2006-09-15/247) semble pertinente ici. Cette analyse est facilement effectuée sans expressions régulières. – VGR