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中提取域名并解除其余的域名。但问题是,首先,如果网址有更深的路径,则不会忽略它;其次,它不适用于所有带.com
扩展名的网址。
例如,如果网址为http://www.lego.com/en-us/technic/?domainredir=technic.lego
,则结果不会是lego
,而是lego.com/en-us/technic/?domainredir=technic.lego
。
答案 0 :(得分:1)
使用
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);
}
}