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