Java análisis de URL de dominio con expresiones regulares

abidinberkay:

Quiero analizar el dominio de una URL (sin 'www') con expresiones regulares y devolverlo. Hay muchos ejemplos de ello en StackOverflow pero no proporcionar la solución para todos los casos por debajo o algunos de ellos tiene características innecesarias. Mis casos son:

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

y todos deben devolver sólo una parte del dominio google.co.uk No hay necesidad de enlaces como 101.34.24 .. o de partida para fps etc ... Sólo se permiten formatos de entrada están por encima. Y puedo validar URL con expresiones regulares: ^(https?:\/\/)?(www\.)?([\w]+\.)+[‌​\w]{2,63}\/?$y está funcionando bien, pero no sé cómo analizarlo.

Nota: Yo sería feliz si no recomiendas clases URI o URL y sus métodos para el análisis de dominio de forma automática como:

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;
    }

Este código funciona perfectamente así pero necesito regex no éste.

Pushpesh Kumar Rajwanshi:

Su expresión regular,

^(https?:\/\/)?(www\.)?([\w]+\.)+[‌​\w]{2,63}\/?$

coincide con la entrada, pero no captura el dominio prevista en un grupo correctamente. Puede modificarlo y hacerlo tan simple como este,

^(?:https?:\/\/)?(?:www\.)?((?:[\w]+\.)+\w+)

que captura la captura de dominio deseado en el grupo 1.

Demo en vivo

Aquí está una muestra de código Java utilizando extractos y copias de nombres de dominio,

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));
        }
    });
}

Huellas dactilares,

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=233793&siteId=1
Recomendado
Clasificación