他のサイトの説明が釈然としなかったので投稿。
以下のref0~2番のホストを抽出したいとする。
ref[0] = "http://www.other.com/path1/index.php?k1=v1&k2=v2#Ref1" ref[1] = "http://www.other.net/path1/index.php?k1=v1&k2=v2#Ref1" ref[2] = "https://www.other.com/"
*ホスト名 0 = www.other.com
SQLでは以下の通り。
substring(ref from 'https?://([^/]*)')
出力は[0] = www.other.com
関数:
substring(抽出文字列, 開始桁, 切り取り文字数)
正規表現:
(1)https?
「?」の使い方:「X?」=Xを0or1文字
httpの後に「sを1文字」または「何もつけない」という意味。
[http|https]と同義。
基本SSL準拠でないと警告が出る仕組みになったので、今後はhttpsが増えてくると思います。
(2)([^/]*)
分解して考えると、[^/]に*が付いて、その外側に()。
手順1. [^/]は「^ = ではない」「/」を[](1文字)なので、
「/」ではない「1文字」と読み替える。
手順2. *は直前の文字の0回以上の繰り返し(最長一致)なので、
「/」ではない文字が出てくるまでの文字列が出力される。
手順3. そこに() = フォーカスする。
ということで、0ではwww.other.comが出力される。
手順3をなしにしてみると・・・
substring(ref from 'https?://[^/]*')
[0] = http://www.other.com が出力される。
さらに、変な位置に()をつけると、
substring(ref from 'https?://([^/])*')
「/ではないの文字列の最後の一文字」を出力できる。
つまり、0の場合comの最後のmだ。意味があるのかは置いといて。
[^/]を[^.]に変えると、
substring(ref from 'https?://([^.]*)')
最初の「.」までのwwwが出力される。
とまあ、こんな感じで分解して考えるといいだろう。