abidinberkay:
私は(「WWW」なし)URLのドメインを解析する正規表現と、それを返します。あり、多くの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などのために開始する...のみ許可された入力フォーマットは上記です。そして、私は正規表現でURLを検証:^(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;
}
このコードは、同様に完璧に動作しますが、私は必要がregexではない、このいずれかを。
PushpeshクマールRajwanshi:
あなたの正規表現、
^(https?:\/\/)?(www\.)?([\w]+\.)+[\w]{2,63}\/?$
入力と一致するが、適切に、グループ内の意図したドメインを取得しません。あなたはそれを修正して、このようなことを簡単にすることができ、
^(?:https?:\/\/)?(?:www\.)?((?:[\w]+\.)+\w+)
どのグループ1であなたの意図したドメインのキャプチャをキャプチャします。
ここで抽出して印刷したドメイン名を使用したサンプル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