我想用正则表达式解析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

09-30 17:14
查看更多