Je veux analyser le domaine d'un URL (sans « www ») avec regex et le retourner. Il y a de nombreux exemples pour cela sur stackoverflow , mais ils ne fournissent pas une solution pour tous les cas ci - dessous ou certains d'entre eux a des caractéristiques inutile. Mes affaires sont:
http://www.google.co.uk pass
http://www.google.co.uk pass
http://google.com.co.uk pass
same for https pass
google.co.uk pass
www.google.co.uk pass
et tous doivent retourner seulement une partie du domaine google.co.uk Il n'y a pas besoin de liens comme 101.34.24 .. ou à partir de fps etc ... formats d'entrée sont autorisés uniquement au - dessus. Et je validate url avec regex: ^(https?:\/\/)?(www\.)?([\w]+\.)+[\w]{2,63}\/?$
et il fonctionne bien , mais je ne sais pas comment l'analyser.
Note: Je serais heureux si vous ne recommandez pas les classes URI ou URL et leurs méthodes pour le domaine de l'analyse automatiquement comme:
private String parseUrl(String url) throws URISyntaxException {
if (url.startsWith("http:/")) {
if (!url.contains("http://")) {
url = url.replaceAll("http:/", "http://");
}
} else if (url.startsWith("https:/")) {
url = url.replaceAll("https:/", "http:/");
} else {
url = "http://" + url;
}
URI uri = new URI(url);
String domain = uri.getHost();
return domain.startsWith("www.") ? domain.substring(4) : domain;
}
Ce code fonctionne parfaitement aussi bien mais j'ai besoin regex pas celui - ci.
Votre regex,
^(https?:\/\/)?(www\.)?([\w]+\.)+[\w]{2,63}\/?$
correspond à l'entrée mais ne capture pas le domaine prévu dans un groupe correctement. Vous pouvez le modifier et le rendre simple comme ça,
^(?:https?:\/\/)?(?:www\.)?((?:[\w]+\.)+\w+)
qui capte votre capture de domaine prévu dans le groupe 1.
Voici un exemple de code Java en utilisant des extraits et copies nom de domaine,
public static void main(String[] args) throws SQLException {
Pattern p = Pattern.compile("^(?:https?:\\/\\/)?(?:www\\.)?((?:[\\w]+\\.)+\\w+)");
List<String> list = Arrays.asList("http://www.google.co.uk", "http://www.google.co.uk",
"http://google.com.co.uk", "https://www.google.co.uk", "https://www.google.co.uk",
"https://google.com.co.uk");
list.forEach(x -> {
Matcher m = p.matcher(x);
if (m.matches()) {
System.out.println(x + " --> " +m.group(1));
}
});
}
estampes,
http://www.google.co.uk --> google.co.uk
http://www.google.co.uk --> google.co.uk
http://google.com.co.uk --> google.com.co.uk
https://www.google.co.uk --> google.co.uk
https://www.google.co.uk --> google.co.uk
https://google.com.co.uk --> google.com.co.uk