はじめに
この実験では、正規表現を使用して Java で与えられた文字列が URL 形式に一致するかどうかをチェックする方法を学びます。URL 用に特別に設計された正規表現パターンを定義し、Pattern.matches()
メソッドを使用して文字列がこのパターンに一致するかテストし、一般的な URL スキームを検証する方法を探ります。この実践的な演習を通じて、Java アプリケーションで URL 検証を実装する実際の手順を学ぶことができます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、正規表現を使用して Java で与えられた文字列が URL 形式に一致するかどうかをチェックする方法を学びます。URL 用に特別に設計された正規表現パターンを定義し、Pattern.matches()
メソッドを使用して文字列がこのパターンに一致するかテストし、一般的な URL スキームを検証する方法を探ります。この実践的な演習を通じて、Java アプリケーションで 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 かどうかをテストします。
前のステップでは、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);
}
}
追加した部分は次の通りです。
String
変数 (url1
, url2
, url3
, url4
) を定義し、それぞれに異なるサンプル文字列を格納しました。その中には、私たちのシンプルなパターンに従った有効な URL もあれば、無効なものもあります。Pattern.matches(urlRegex, url)
を使用しました。このメソッドは、文字列全体が urlRegex
パターンに一致する場合は true
を返し、そうでない場合は false
を返します。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()
メソッドを使用して文字列が正規表現パターンに一致するかどうかをテストすることに成功しました。
前のステップでは、シンプルな正規表現パターンを定義し、Pattern.matches()
を使ってテストしました。現在のパターンは、http
または https
で始まる URL のみを検証します。しかし、URL は ftp
、mailto
、file
など、他のスキームを持つこともできます。
このステップでは、正規表現パターンを変更して、より一般的な URL スキームを含めます。URL のより堅牢な正規表現パターンは非常に複雑ですが、デモンストレーションのために、現在のパターンを拡張していくつかの一般的なスキームを含めることができます。
UrlValidator.java
ファイルを更新しましょう。
WebIDE エディターで UrlValidator.java
ファイルを開きます。
urlRegex
文字列を変更して、http
と https
に加えて ftp
と mailto
スキームを含めます。また、ftp
URL のテストケースも追加します。
次の行を置き換えます。
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 URL
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);
}
}
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 検証のための核心となるパターンを定義することに焦点を当てました。