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

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

関連記事

「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)

  <目次> (1) 「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)  (1-1) エ …

Javaでファイル読み込みを行う方法+サンプルプログラムもご紹介

<目次> (1) Javaでファイル読み込み&書き込みを行う方法  (1-1) 構文  (1-2) サンプルプログラム (1) Javaでファイル読み込み&書き込みを行う方法 (1-1) 構文 (構文 …

JavaのSpring Bootを使ってHello Worldのアプリケーションを作成する

  <目次> (1) JavaのSpring Bootを使ってHello Worldのアプリケーションを作成する  (1-1) はじめに(Spring Bootとは?)  (1-2) Spr …

Javaで「XXX has been compiled by a more recent version of the Java Runtime~」エラー(UnsupportedClassVersionError)が出る原因と対処方法について

  <目次> (1) Javaで「XXX has been compiled by a more recent version of the Java Runtime~」エラー(Unsupp …

JavaでJSON配列から値を抽出する方法+郵便番号検索APIのサンプルプログラムも紹介

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) JSON配列から値抽出する方法  (2-1) JSON配列のデータの構造例  (2-2) JSON配列のデータ …

  • English (United States)
  • 日本語
Top