L'analyse syntaxique de domaine Java avec regex

abidinberkay:

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.

Pushpesh Kumar Rajwanshi:

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.

live Demo

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

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=233787&siteId=1
conseillé
Classement