Java で文字列が URL 形式に一致するかどうかを確認する方法

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、正規表現を使用して Java で与えられた文字列が URL 形式に一致するかどうかをチェックする方法を学びます。URL 用に特別に設計された正規表現パターンを定義し、Pattern.matches() メソッドを使用して文字列がこのパターンに一致するかテストし、一般的な URL スキームを検証する方法を探ります。この実践的な演習を通じて、Java アプリケーションで URL 検証を実装する実際の手順を学ぶことができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java/StringManipulationGroup -.-> java/regex("RegEx") subgraph Lab Skills java/regex -.-> lab-559993{{"Java で文字列が URL 形式に一致するかどうかを確認する方法"}} end

URL の正規表現パターンを定義する

このステップでは、Java で URL に一致する正規表現パターンを定義する方法を学びます。正規表現は、しばしば "regex" または "regexp" と略され、検索パターンを定義する文字のシーケンスです。文字列のパターンマッチングと操作に非常に強力です。

URL を検証するために、正規表現パターンは、与えられた文字列が URL の標準構造(例えば http://www.example.comhttps://example.org/path)に従っているかどうかをチェックするのに役立ちます。

正規表現を扱うために新しい Java ファイルを作成しましょう。

  1. WebIDE を開きます。左側のファイルエクスプローラーで、~/project ディレクトリにいることを確認します。

  2. ~/project ディレクトリ内の空白部分を右クリックし、「新しいファイル」を選択します。

  3. 新しいファイルの名前を UrlValidator.java として、Enter キーを押します。

  4. UrlValidator.java ファイルがコードエディターで開くはずです。

  5. 次の 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.");: この行は、パターンが定義されたことを示すメッセージをコンソールに出力します。
  6. ファイルを保存します(Ctrl+S または Cmd+S)。

  7. 次に、この Java プログラムをコンパイルしましょう。WebIDE の下部にあるターミナルを開きます。~/project ディレクトリにいることを確認します。

  8. javac コマンドを使用してコードをコンパイルします。

    javac UrlValidator.java

    エラーがなければ、コマンドは出力なしで完了します。~/project ディレクトリに UrlValidator.class ファイルが作成されます。

  9. 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 をテストしましょう。

  1. UrlValidator.java ファイルがまだ開いていない場合は、WebIDE エディターで開きます。

  2. 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 の検証結果を印刷しました。
  3. UrlValidator.java ファイルを保存します。

  4. ターミナルで変更したコードをコンパイルします。

    javac UrlValidator.java

    再び、コンパイルが成功すれば出力はありません。

  5. コンパイルしたプログラムを実行します。

    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 は ftpmailtofile など、他のスキームを持つこともできます。

このステップでは、正規表現パターンを変更して、より一般的な URL スキームを含めます。URL のより堅牢な正規表現パターンは非常に複雑ですが、デモンストレーションのために、現在のパターンを拡張していくつかの一般的なスキームを含めることができます。

UrlValidator.java ファイルを更新しましょう。

  1. WebIDE エディターで UrlValidator.java ファイルを開きます。

  2. urlRegex 文字列を変更して、httphttps に加えて ftpmailto スキームを含めます。また、ftp URL のテストケースも追加します。

    次の行を置き換えます。

    String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$";

    次の行に置き換えます。

    String urlRegex = "^(http|https|ftp|mailto)://[^\\s/$.?#].[^\\s]*$";

    グループを表す括弧 () の中に |ftp|mailto を追加し、| 記号が「OR」演算子として機能していることに注意してください。これは、パターンが httphttpsftp、または mailto で始まり、その後に :// が続く文字列に一致するようになることを意味します。

  3. FTP URL の新しいテストケースを追加します。url4 の定義の後に次の行を追加します。

    String url5 = "ftp://ftp.example.com/files"; // Valid FTP URL
  4. url4 の検証の後に 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);
        }
    }
  5. UrlValidator.java ファイルを保存します。

  6. ターミナルで更新したコードをコンパイルします。

    javac UrlValidator.java
  7. コンパイルしたプログラムを実行します。

    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 検証のための核心となるパターンを定義することに焦点を当てました。