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

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

関連記事

JavaのhashCode()で31を掛け算する理由について

<目次> (1) JavaのhashCode()で31を掛け算する理由について  (1-1) ハッシュの計算のソースコード  (1-2) ソースコードに登場する代表的な変数  (1-3) ソースコード …

Javaのフォーム認証でオリジナルの(元の)リクエスト情報を取得する方法

<目次> (1) Javaのフォーム認証でオリジナルの(元の)リクエスト情報を取得する方法  (1-1) 構文  (1-2) サンプルプログラム   ●JSP(要求ページ)   ●JSP(ログインペー …

Javaでカンマやクォーテーションをエスケープする方法

<目次> (1) Javaでカンマやクォーテーションをエスケープする方法  (1-1) 実現方法・構文  (1-2) サンプルプログラム  (1-3) 参考:カンマとダブルクォーテーション両方のエスケ …

Tomcatの起動時のエラー「アドレスは既に使用中です」や「必要な幾つかのポートがすでに使用中です」の対処方法

<目次> (1) Tomcatの起動時のエラー「アドレスは既に使用中です」や「必要な幾つかのポートがすでに使用中です」の対処方法  (1-1) 発生状況  (1-2) 原因  (1-3) 対処方法 ( …

サーバサイドJava(JSP&サーブレット)における画面遷移の手法とそのサンプルコードの紹介

(0)目次&概説 (1) 画面遷移の代表手法  (1-1) フォワード  (1-2) リダイレクト (2) 画面遷移手法のご紹介  (2-1) 方法1:formタグ+Submitボタン(JSP/Ser …

  • English (United States)
  • 日本語
Top