Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

Javaで正規表現を使ってURLを文字列から検出する方法

投稿日:2021年3月31日 更新日:

<目次>

(1) Javaで正規表現を使ってURLを文字列から検出する方法
 (1-1) 構文
 (1-2) 構文の説明
 (1-3) サンプルプログラム
 (1-4) ツールのご紹介

(1) Javaで正規表現を使ってURLを文字列から検出する方法

(1-1) 構文

URLを検知するための正規表現として、以下の例をご紹介します。

(正規表現)

\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]

目次にもどる

(1-2) 構文の説明

①「\\b」

「\b」は英語では「word boundary」と呼ばれ、単語と単語の境界とマッチします(例えば、単語の最初or最後とマッチする)。更にJavaのString型で「\」をエスケープするために、更に「\」をもう一つ付けて「\\b」としています。

②「(https?|ftp|file)://」

(x)は「x」を含む文言とマッチし、そのマッチした部分を記憶します。例えば(Hello)は”Hello World”のHelloの部分とマッチし、そのマッチ結果を記憶します。
 
また()内の「|」記号は「または」の意味で、「https」または「ftp」または「file」という意味になります。
 
今回の場合はカッコ内の文言とマッチするので、結果的には下記①~③のいずれかとマッチする、というニュアンスになります。
 
・https://
・ftp://
・file://
 
URLというと、通常「http」や「https」を想像する方が多いと思いますが、この例では他のプロトコルのケースも想定しています。
 
(図121)↓実行した正規表現
\\b(https?|ftp|file)://

③「[-a-zA-Z0-9・・(中略)・・]」

 
■意味
・「a~z」のアルファベット(小文字)とマッチする
・「A~Z」のアルファベット(大文字)とマッチする
・「0~9」の数字とマッチする
 
■補足
まず上記①~③は最小記述でそれぞれ次のように表現できます。
・[a-z]
・[A-Z]
・[0-9]
 
このように文字と文字の間に入るハイフン「-」には「~」(から)の意味があります(a~zなど)。これら3つを組み合わせると、次のようになります。
 
[a-zA-Z0-9]
 
更に先頭にハイフン「-」を付与する事で、ハイフン自身もマッチ対象となります(ハイフン「-」自体も文字列として扱われる)。なので、同じハイフン「-」でも、[ ]の先頭にある時と、文字間にある時とで意味合いが異なるという事です。
 
(例)
検知したいURL: https://developer.mozilla.org/en-US/
 

正規表現①:「[-a-zA-Z0-9:/.]*」

\\b(https?|ftp|file)://[a-zA-Z0-9+&@#/%?=~_|!:,.;]*

⇒「https://developer.mozilla.org/en」までしか抽出できず・・

(図122)

正規表現②:「[a-zA-Z0-9:/.]*」

\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*

⇒「https://developer.mozilla.org/en-US/」まで抽出できる!

(図123)

④「[+&@#/%?=~_|!:,.;]」

Character Class([..]の事)で囲まれた記号は特別な意味を持たず、単にこの中に記載された記号自体とマッチするという意味になります。
 
なので、例えば[@]は文字”@”とマッチするといったイメージです。

⑤「[何かの正規表現]*」

正規表現の後にアスタリスク「*」が続く場合、前にある正規表現が「0回以上」出現する事を意味します。
 
(例)
正規表現:「a*b」
マッチ単語例:「aab」「aabb」「acb」など
 

(1-3) サンプルプログラム

別記事「Javaで正規表現の使い方をご紹介」にて、正規表現のサンプルプログラムをご紹介していますので、こちらをご参照頂けたらと思います。構造はほぼ同じで、唯一「String regex = XXXXX」の部分を下記に置き換えるのみです。

String regex = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";

目次にもどる

(1-4) ツールのご紹介

今回は正規表現を素早くテストするためにMozillaの無料で使えるサイトを利用しました。検索文字列と正規表現の部分を変えて実行するだけで、素早く正規表現のテストを行えます。

(URL)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

JSP/Servletでログイン・ログアウト機能を作成する方法

<目次> (1) JSP/Servletでログイン・ログアウト機能を作成する方法  (1-1) ログイン   (1-1-1) 概要・構文   (1-1-2) サンプルプログラム  (1-2) ログアウ …

Javaのスレッドとは?概念やサンプルプログラムのご紹介

  <目次> (1) Javaのスレッドとは?概念やサンプルプログラムのご紹介  (1-1) Javaのスレッドとは?  (1-2) 方法①:Threadクラス継承の構文  (1-3) 方法 …

JavaのJDBC接続でjava.sql.SQLRecoverableException: Closed Connectionが発生した時の解決メモ

(0)目次&概説 (1) エラー事象の概要  (1-1) エラーの発生状況  (1-2) エラーメッセージ全文 (2) エラーの原因 (3) エラーの対処方法  (3-1) エラーの修正内容  (3- …

Javaの選択ソートとは?アルゴリズムの流れ+サンプルプログラムをご紹介

<目次> (1) バイナリ―サーチとは?Javaのサンプルプログラムを用いて解説  (1-1) バイナリ―サーチのアルゴリズム  (1-2) バイナリ―サーチの性能(処理回数)  (1-3) バイナリ …

int型のオーバーフロー(桁あふれ)とは?実際の発生パターンと併せてご紹介

  <目次> (1) int型のオーバーフロー(桁あふれ)とは?実際の発生パターンと併せてご紹介  (1-1) int型のオーバーフローとは?  (1-2) int型のオーバーフローが発生す …

  • English (United States)
  • 日本語
Top