Java url 域名解析与正则表达式

标签 java regex

我想使用正则表达式解析 URL 的域(不带“www”)并返回它。 stackoverflow 上有许多示例,但它们并未为以下所有情况提供解决方案,或者其中一些具有不必要的功能。我的案例是:

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

并且所有内容都必须仅返回域的一部分google.co.uk不需要像 101.34.24.. 或以 fps 等开头的链接...上面仅允许的输入格式。我用正则表达式验证网址: ^(https?:\/\/)?(www\.)?([\w]+\.)+[‌​\w]{2,63}\/?$ 和它运行良好,但我不知道如何解析它。

注意:如果您不推荐 URI 或 URL 类及其自动解析域的方法,我会很高兴:

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

这段代码也可以完美运行,但我需要的是正则表达式,而不是这个。

最佳答案

你的正则表达式,

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

与输入匹配,但未正确捕获组中的预期域。你可以修改它并使其变得简单,就像这样,

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

它捕获您在组 1 中预期的域捕获。

<强> Live Demo

这里是一个使用提取和打印域名的 Java 代码示例,

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

打印,

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

关于Java url 域名解析与正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53784098/

相关文章:

java - 为 Android 设置按钮

java - 有什么方法可以仅在第一次执行时使用预设值完全填充表格?

java - 如果我手动设置身份验证,原理的自动注入(inject)将为空

regex - 序数二进制数

java - 删除字符串之间的空格

PHP删除所有表tr td标签

java - Scala jar 读取外部属性文件

Java 正则表达式查找/替换

JAVA正则表达式失败

java - NullPointerException,杀死了我的程序