使用Matcher提取URL个域名

Using Matcher to extract URL domain name

    static String AdrPattern="http://www.([^&]+)\.com\.*";
    static Pattern WebUrlPattern = Pattern.compile (AdrPattern);
    static Matcher WebUrlMatcher;
                WebUrlMatcher = WebUrlPattern.matcher ("keyword");
                if(WebUrlMatcher.matches())
             String  extractedPath = WebUrlMatcher.group (1);

考虑到以上代码,我的目标是从 URL 中提取域名并忽略其余部分。但麻烦的是,首先,如果 URL 有更深的路径,它不会忽略它,其次,它不适用于所有扩展名为 .com 的 URL。

例如,如果 URL 是 http://www.lego.com/en-us/technic/?domainredir=technic.lego,结果将不是 lego,而是 lego.com/en-us/technic/?domainredir=technic.lego

使用

static String AdrPattern="http://www\.([^&]+)\.com.*";
                                    ^^              ^

你转义了最后一个点,它被当作一个文字,matches无法匹配整个字符串。另外,必须转义第一个点。

此外,为了使正则表达式更严格一些,您可以将 [^&]+ 替换为 [^/&]

更新:

static String AdrPattern="http://www\.([^/&]+)\.com/([^/]+)/([^/]+)/([^/]+).*";
static Pattern WebUrlPattern = Pattern.compile (AdrPattern);
static Matcher WebUrlMatcher = WebUrlPattern.matcher("http://www.lego.com/en-us/technic/?domainredir=technic.lego");
if(WebUrlMatcher.matches()) {
    String  extractedPath = WebUrlMatcher.group(1);
    String  extractedPart1 = WebUrlMatcher.group(2);
    String  extractedPart2 = WebUrlMatcher.group(3);
    String  extractedPart3 = WebUrlMatcher.group(4);
}

或者,\G:

static String AdrPattern="(?:http://www\.([^/&]+)\.com/|(?!^)\G)/?([^/]+)";
static String AdrPattern="http://www\.([^/&]+)\.com/([^/]+)/([^/]+)/([^/]+)";
static Pattern WebUrlPattern = Pattern.compile (AdrPattern);
static Matcher WebUrlMatcher = WebUrlPattern.matcher("http://www.lego.com/en-us/technic/?domainredir=technic.lego");
int cnt = 0;
while(WebUrlMatcher.find()) {
    if (cnt == 0) {
       String extractedPath = WebUrlMatcher.group(1);
       String extractedPart = WebUrlMatcher.group(2);
       cnt = cnt + 1;
    }
    else {
       String extractedPart = WebUrlMatcher.group(2);
    }
}