
Javaの正規表現をマスターして、文字列操作の達人になろう!PatternとMatcherを使いこなせば、複雑なパターンも自由自在。
Javaの正規表現とは?基本を理解しよう
Javaの正規表現は、文字列のパターンマッチングを行うための強力なツールです。特定のパターンに合致する文字列を検索、置換、抽出する際に非常に役立ちます。例えば、メールアドレスの形式が正しいか、電話番号が特定のパターンに合致するかなどを検証できます。
Javaでは、java.util.regex
パッケージに正規表現を扱うためのクラスが用意されています。主なクラスはPattern
とMatcher
です。Pattern
クラスは正規表現パターンをコンパイルし、Matcher
クラスはコンパイルされたパターンを使って文字列とのマッチングを行います。
Patternクラス:正規表現パターンのコンパイル
Pattern
クラスは、正規表現パターンをコンパイルして、Matcherオブジェクトを作成するために使用されます。Pattern.compile()
メソッドを使って正規表現文字列をコンパイルします。
import java.util.regex.Pattern;
public class PatternExample {
public static void main(String[] args) {
// 正規表現パターンをコンパイル
Pattern pattern = Pattern.compile("Java");
// パターンを使ってMatcherオブジェクトを作成
// (この時点ではマッチングは行われません)
System.out.println("Pattern compiled: " + pattern.pattern());
}
}
上記の例では、Java
という文字列にマッチするパターンをコンパイルしています。pattern()
メソッドでコンパイルしたパターンを確認できます。
Matcherクラス:文字列とのマッチング
Matcher
クラスは、Pattern
クラスでコンパイルされた正規表現パターンを使って、文字列とのマッチングを行います。Matcher
オブジェクトは、Pattern.matcher()
メソッドで作成します。
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class MatcherExample {
public static void main(String[] args) {
// 正規表現パターンをコンパイル
Pattern pattern = Pattern.compile("Java");
// マッチング対象の文字列
String text = "Java is a programming language. Java is popular.";
// Matcherオブジェクトを作成
Matcher matcher = pattern.matcher(text);
// マッチングを行う
while (matcher.find()) {
System.out.println("Found match at: " + matcher.start() + " - " + matcher.end());
}
}
}
この例では、find()
メソッドを使って、文字列中にJava
というパターンが見つかるかどうかを検索しています。start()
メソッドとend()
メソッドは、マッチした文字列の開始位置と終了位置を返します。
Matcher
クラスには、他にも様々なメソッドがあります。matches()
メソッドは、文字列全体がパターンにマッチするかどうかを判定します。lookingAt()
メソッドは、文字列の先頭がパターンにマッチするかどうかを判定します。replaceFirst()
メソッドとreplaceAll()
メソッドは、マッチした文字列を置換します。
正規表現の特殊文字とメタ文字
正規表現では、特殊な意味を持つ文字(メタ文字)がいくつかあります。これらのメタ文字を組み合わせることで、複雑なパターンを表現できます。
代表的なメタ文字:
.
(ドット): 任意の1文字にマッチします。
*
(アスタリスク): 直前の文字の0回以上の繰り返しにマッチします。
+
(プラス): 直前の文字の1回以上の繰り返しにマッチします。
?
(クエスチョンマーク): 直前の文字の0回または1回の出現にマッチします。
[]
(ブラケット): ブラケット内のいずれかの文字にマッチします。例: [abc]
は a, b, c のいずれかにマッチします。
()
(丸括弧): グループ化のために使用されます。グループ化された部分は後で参照できます。
\d
: 任意の数字にマッチします。
\w
: 任意の英数字(a-z, A-Z, 0-9, _)にマッチします。
\s
: 任意の空白文字(スペース、タブ、改行など)にマッチします。
// 例:メールアドレスのパターン
// \w+ は1つ以上の英数字、\.+はドット、-はハイフン、@はアットマークを表す
String emailRegex = "[\\w\\.-]+@\\w+\\.\\w+";
上記は非常に単純な例ですが、メタ文字を組み合わせることで、より複雑なパターンを定義できます。
エスケープ処理の重要性
正規表現でメタ文字そのものを検索したい場合は、エスケープ処理が必要です。エスケープ処理は、メタ文字の前にバックスラッシュ \
を付けることで行います。ただし、Javaの文字列リテラル内では、バックスラッシュ自体もエスケープする必要があるため、\\
と記述します。
// ドット(.)そのものを検索する場合
String text = "example.com";
Pattern pattern = Pattern.compile("example\\.com");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
System.out.println("Match found!");
}
参考リンク
まとめ
Javaの正規表現は、文字列処理において非常に強力なツールです。Pattern
クラスとMatcher
クラスを理解し、メタ文字を効果的に活用することで、複雑なパターンマッチングを簡単に行うことができます。今回の記事で、正規表現の基本的な使い方を理解し、日々の開発に役立ててください。