はじめに
この実験では、正規表現を使用して Java で与えられた文字列が URL 形式に一致するかどうかをチェックする方法を学びます。URL 用に特別に設計された正規表現パターンを定義し、Pattern.matches() メソッドを使用して文字列がこのパターンに一致するかテストし、一般的な URL スキームを検証する方法を探ります。この実践的な演習を通じて、Java アプリケーションで URL 検証を実装する実際の手順を学ぶことができます。
URL 正規表現パターンを定義する
このステップでは、Java で URL に一致する正規表現パターンを定義する方法を学びます。正規表現は、しばしば "regex" または "regexp" と略され、検索パターンを定義する文字のシーケンスです。文字列のパターンマッチングと操作に非常に強力です。
URL を検証するために、正規表現パターンは、与えられた文字列が URL の標準構造(例えば http://www.example.com や https://example.org/path)に従っているかどうかをチェックするのに役立ちます。
正規表現を扱うために新しい Java ファイルを作成しましょう。
WebIDE を開きます。左側のファイルエクスプローラーで、
~/projectディレクトリにいることを確認します。~/projectディレクトリ内の空白部分を右クリックし、「新しいファイル」を選択します。新しいファイルの名前を
UrlValidator.javaとして、Enter キーを押します。UrlValidator.javaファイルがコードエディターで開くはずです。次の Java コードをエディターにコピーして貼り付けます。
import java.util.regex.Pattern; public class UrlValidator { public static void main(String[] args) { // Define a simple regex pattern for a URL String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$"; // Compile the regex pattern Pattern pattern = Pattern.compile(urlRegex); System.out.println("URL Regex Pattern Defined."); } }このコードの新しい部分を分解してみましょう。
import java.util.regex.Pattern;: この行は、Java の組み込みの正規表現サポートの一部であるPatternクラスをインポートします。String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$";: この行は、urlRegexという名前のString変数を定義し、正規表現パターンを割り当てます。^: 文字列の先頭に一致します。(http|https): "http" または "https" のいずれかに一致します。://: リテラル文字 "://" に一致します。[^\\s/$.?#]: 空白文字 (\\s)、スラッシュ (/)、ドル記号 ($)、ピリオド (.)、疑問符 (?)、またはハッシュ記号 (#) ではない任意の文字に一致します。これはドメイン名部分をマッチングする簡略化された方法です。.: 任意の文字(改行を除く)に一致します。[^\\s]*: 空白ではない 0 文字以上の文字に一致します。これは URL パスとクエリの残りの部分をマッチングする簡略化された方法です。$: 文字列の末尾に一致します。sの前の二重バックスラッシュ (\\) に注意してください。Java 文字列では、単一のバックスラッシュはエスケープ文字なので、正規表現パターンでリテラルバックスラッシュを表すには\\が必要です。
Pattern pattern = Pattern.compile(urlRegex);: この行は、正規表現文字列をPatternオブジェクトにコンパイルします。同じパターンを複数回使用する予定の場合、パターンをコンパイルする方が効率的です。System.out.println("URL Regex Pattern Defined.");: この行は、パターンが定義されたことを示すメッセージをコンソールに出力します。
ファイルを保存します(Ctrl+S または Cmd+S)。
次に、この Java プログラムをコンパイルしましょう。WebIDE の下部にあるターミナルを開きます。
~/projectディレクトリにいることを確認します。javacコマンドを使用してコードをコンパイルします。javac UrlValidator.javaエラーがなければ、コマンドは出力なしで完了します。
~/projectディレクトリにUrlValidator.classファイルが作成されます。javaコマンドを使用してコンパイルされたプログラムを実行します。java UrlValidator次の出力が表示されるはずです。
URL Regex Pattern Defined.
URL の基本的な正規表現パターンを含む Java プログラムを正常に定義してコンパイルしました。次のステップでは、このパターンを使用して、さまざまな文字列が有効な URL かどうかをテストします。
Pattern.matches() で URL をテストする
前のステップでは、URL の正規表現パターンを定義し、それを Pattern オブジェクトにコンパイルしました。今度は、このパターンを使用して、Pattern.matches() メソッドを使ってさまざまな文字列が有効な URL かどうかをチェックしましょう。
Pattern.matches(regex, input) メソッドは、入力文字列全体が与えられた正規表現に一致するかどうかをチェックする便利な方法です。このメソッドは正規表現をコンパイルし、入力をそれに対して一度にマッチングします。
UrlValidator.java ファイルを変更して、いくつかのサンプル URL をテストしましょう。
UrlValidator.javaファイルがまだ開いていない場合は、WebIDE エディターで開きます。mainメソッドを変更して、次のコードを追加します。このコードはPattern pattern = Pattern.compile(urlRegex);の行の 後に 追加します。import java.util.regex.Pattern; public class UrlValidator { public static void main(String[] args) { // Define a simple regex pattern for a URL String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$"; // Compile the regex pattern Pattern pattern = Pattern.compile(urlRegex); // Test some URLs String url1 = "http://www.example.com"; String url2 = "https://example.org/path/to/page"; String url3 = "ftp://invalid-url.com"; // Invalid scheme String url4 = "http:// example.com"; // Invalid character (space) System.out.println("\nTesting URLs:"); boolean isUrl1Valid = Pattern.matches(urlRegex, url1); System.out.println(url1 + " is valid: " + isUrl1Valid); boolean isUrl2Valid = Pattern.matches(urlRegex, url2); System.out.println(url2 + " is valid: " + isUrl2Valid); boolean isUrl3Valid = Pattern.matches(urlRegex, url3); System.out.println(url3 + " is valid: " + isUrl3Valid); boolean isUrl4Valid = Pattern.matches(urlRegex, url4); System.out.println(url4 + " is valid: " + isUrl4Valid); } }追加した部分は次の通りです。
- 4 つの
String変数 (url1,url2,url3,url4) を定義し、それぞれに異なるサンプル文字列を格納しました。その中には、私たちのシンプルなパターンに従った有効な URL もあれば、無効なものもあります。 - 出力をわかりやすくするために、印刷文を追加しました。
- 各テスト文字列に対して
Pattern.matches(urlRegex, url)を使用しました。このメソッドは、文字列全体がurlRegexパターンに一致する場合はtrueを返し、そうでない場合はfalseを返します。 - 各 URL の検証結果を印刷しました。
- 4 つの
UrlValidator.javaファイルを保存します。ターミナルで変更したコードをコンパイルします。
javac UrlValidator.java再び、コンパイルが成功すれば出力はありません。
コンパイルしたプログラムを実行します。
java UrlValidator次のような出力が表示されるはずです。
URL Regex Pattern Defined. Testing URLs: http://www.example.com is valid: true https://example.org/path/to/page is valid: true ftp://invalid-url.com is valid: false http:// example.com is valid: false
この出力は、私たちのシンプルな正規表現パターンが最初の 2 つの文字列を(パターンに従って)有効な URL として、最後の 2 つを無効なものとして正しく識別したことを示しています。
これで、Java で Pattern.matches() メソッドを使用して文字列が正規表現パターンに一致するかどうかをテストすることに成功しました。
一般的な URL スキームを検証する
前のステップでは、シンプルな正規表現パターンを定義し、Pattern.matches() を使ってテストしました。現在のパターンは、http または https で始まる URL のみを検証します。しかし、URL は ftp、mailto、file など、他のスキームを持つこともできます。
このステップでは、正規表現パターンを変更して、より一般的な URL スキームを含めます。URL のより堅牢な正規表現パターンは非常に複雑ですが、デモンストレーションのために、現在のパターンを拡張していくつかの一般的なスキームを含めることができます。
UrlValidator.java ファイルを更新しましょう。
WebIDE エディターで
UrlValidator.javaファイルを開きます。urlRegex文字列を変更して、httpとhttpsに加えてftpとmailtoスキームを含めます。また、ftpURL のテストケースも追加します。次の行を置き換えます。
String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$";次の行に置き換えます。
String urlRegex = "^(http|https|ftp|mailto)://[^\\s/$.?#].[^\\s]*$";グループを表す括弧
()の中に|ftp|mailtoを追加し、|記号が「OR」演算子として機能していることに注意してください。これは、パターンがhttp、https、ftp、またはmailtoで始まり、その後に://が続く文字列に一致するようになることを意味します。FTP URL の新しいテストケースを追加します。
url4の定義の後に次の行を追加します。String url5 = "ftp://ftp.example.com/files"; // Valid FTP URLurl4の検証の後にurl5の検証を追加します。boolean isUrl5Valid = Pattern.matches(urlRegex, url5); System.out.println(url5 + " is valid: " + isUrl5Valid);これで、完全な
mainメソッドは次のようになります。import java.util.regex.Pattern; public class UrlValidator { public static void main(String[] args) { // Define a simple regex pattern for a URL including more schemes String urlRegex = "^(http|https|ftp|mailto)://[^\\s/$.?#].[^\\s]*$"; // Compile the regex pattern Pattern pattern = Pattern.compile(urlRegex); System.out.println("URL Regex Pattern Defined."); // Test some URLs String url1 = "http://www.example.com"; String url2 = "https://example.org/path/to/page"; String url3 = "invalid-url.com"; // Invalid (missing scheme) String url4 = "http:// example.com"; // Invalid character (space) String url5 = "ftp://ftp.example.com/files"; // Valid FTP URL System.out.println("\nTesting URLs:"); boolean isUrl1Valid = Pattern.matches(urlRegex, url1); System.out.println(url1 + " is valid: " + isUrl1Valid); boolean isUrl2Valid = Pattern.matches(urlRegex, url2); System.out.println(url2 + " is valid: " + isUrl2Valid); boolean isUrl3Valid = Pattern.matches(urlRegex, url3); System.out.println(url3 + " is valid: " + isUrl3Valid); boolean isUrl4Valid = Pattern.matches(urlRegex, url4); System.out.println(url4 + " is valid: " + isUrl4Valid); boolean isUrl5Valid = Pattern.matches(urlRegex, url5); System.out.println(url5 + " is valid: " + isUrl5Valid); } }UrlValidator.javaファイルを保存します。ターミナルで更新したコードをコンパイルします。
javac UrlValidator.javaコンパイルしたプログラムを実行します。
java UrlValidatorこれで、FTP URL も有効としてマークされた、次のような出力が表示されるはずです。
URL Regex Pattern Defined. Testing URLs: http://www.example.com is valid: true https://example.org/path/to/page is valid: true invalid-url.com is valid: false http:// example.com is valid: false ftp://ftp.example.com/files is valid: true
正規表現パターンを変更して、より一般的な URL スキームを含め、更新したパターンをテストすることに成功しました。これは、正規表現パターンを調整して、より広い範囲の入力に一致させる方法を示しています。
まとめ
この実験では、まず Java で URL を検証するための正規表現パターンを定義する方法を学びました。新しい Java ファイル UrlValidator.java を作成し、java.util.regex.Pattern クラスをインポートしました。次に、"http" または "https" で始まり、その後に "://" が続く文字列に一致する基本的な正規表現パターンを含む String 変数 urlRegex を定義し、Pattern.compile() を使用してこのパターンをコンパイルしました。この最初のステップでは、必要なツールをセットアップし、Java の組み込み正規表現機能を使用して URL 検証のための核心となるパターンを定義することに焦点を当てました。



