URLのうちドメイン名までを正規表現を用いて抽出する

インターン2日目です。
今日もいろいろなトラップに引っかかったり、(入力ミスに気付かずに悩んだり)して大変でしたが、なんとかインターンプログラムの基礎編を完了させることができました。

今回は、今日行った内容のうちURLドメイン名部までの抽出について紹介してみたいと思います。

URLのドメイン名の抽出

一般に、URLは

(プロトコル名)://(ドメイン部)/(いろいろ)

と表されます。 ※ドメイン名は、サブドメイン、ドメイン、トップドメインを含む
(参照:http://web-tan.forum.impressrd.jp/files/images/seomoz/SEO-Cheat-Sheet.pdf )

例えば、Googleの検索結果は、

https://www.google.co.jp/search?q=%E3%82%B5%E3%83%BC%E3%83%90%E3%83%AB%E3%81%A1%E3%82%83%E3%82%93&biw=1107&bih=776&source=lnms&tbm=isch&sa=X&sqi=2&ved=0ahUKEwjSz6L4zsPSAhXHVLwKHSL_CGQQ_AUIBigB

となっています。

このうち、

(プロトコル名)://(ドメイン部)/

までを正規表現を用いて抽出します。

Javaで正規表現を使う下準備

正規表現を用いたいファイルで以下の2つのクラスを読み込みます。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

実際のコード

  public String getUrlDomain() {
      Matcher m = Pattern.compile("(https?://[^/]+/)").matcher(getUrl());
      if (m.find()) {
          return m.group(1);
      } else {
          return null;
      }
  }

.matcher(getUrl())部で、getUrl()によって返された文字列を対象にしていることを表しています。

.compile内部の正規表現のポイントは以下の通りです。

  • " ( ), ( ) " … 与えられた文字列をカッコ()のブロックに分けます。 (下の段にあるgroup(1)は1つ目のカッコの中身を表しています。)     
  • https??直前の1字が0文字または1文字であることを表します。

  • [^/] … 初めて/(スラッシュ)が現れる直前までの文字列を表します。

このようにして、先述したURLのドメイン部までの文字列を抽出しています。

(参照: 以下のHackを参考にしました。 https://hacknote.jp/archives/13258/ )