Javaの正規表現とは?基礎知識と使い方をわかりやすく解説
正規表現(Regular Expression)とは、入力テキストを検索・処理するための「パターン」を定義する特殊な文字列のことです。1つ以上の文字や記号を組み合わせて構成されており、正規表現を活用することで、文字列の検索や置換を効率的かつ柔軟に行うことができます。
Javaでは、java.util.regexパッケージによって正規表現によるパターンマッチング機能が提供されています。このパッケージには、主に次の3つのクラスが含まれています。
java.util.regexパッケージの主要なクラス
1. Patternクラス
Patternクラスは、コンパイル済みの正規表現を表すクラスです。文字列と正規表現を照合するために、次の2つのメソッドが用意されています。
- compile():正規表現を表す文字列を引数として受け取り、そのパターンを持つPatternオブジェクトを生成して返します。
- matcher():対象の文字列を引数として受け取り、現在のPatternオブジェクトが表すパターンとの照合を行うMatcherオブジェクトを生成します。
2. Matcherクラス
Matcherクラスは、実際にマッチング操作を実行する「エンジン」となるクラスです。マッチした結果を取得するには、主に次の2つのメソッドを使用します。
- find():マッチ操作が成功した場合はtrueを、失敗した場合はfalseを返します。
- group():グループ番号を表す整数値を引数として受け取り、マッチ操作において指定グループがキャプチャした文字列を返します。
3. PatternSyntaxExceptionクラス
PatternSyntaxExceptionは、正規表現パターンに構文エラーが含まれていることを示す非チェック例外です。無効な正規表現をcompile()メソッドに渡すとスローされます。
サンプルコード1:ASCII以外の文字を削除する
次の例では、正規表現「[^\\p{ASCII}]」(ASCII以外の任意の1文字に一致するパターン)を使用し、入力文字列からASCII範囲外の文字をすべて除去しています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input string: ");
String input = sc.nextLine();
String regex = "[^\\p{ASCII}]";
// パターンオブジェクトの作成
Pattern pattern = Pattern.compile(regex);
// 文字列内でコンパイル済みパターンと照合
Matcher matcher = pattern.matcher(input);
// 空のStringBufferを作成
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sb, "");
}
matcher.appendTail(sb);
System.out.println("Result: \n" + sb.toString());
}
}
実行結果
Enter input string: whÿ do we fall Result: wh do we fall
入力「whÿ do we fall」に対して、ASCII範囲外の文字「ÿ」が取り除かれ、「wh do we fall」と出力されていることがわかります。
サンプルコード2:特定の文字が出現する位置を検索する
次の例では、正規表現「[t]」を使用し、入力テキスト中に文字「t」が出現する位置(インデックス)を順番に出力しています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StartExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "[t]";
// パターンオブジェクトの作成
Pattern pattern = Pattern.compile(regex);
// 文字列内でコンパイル済みパターンと照合
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
int start = matcher.start();
System.out.println(start);
}
}
}
実行結果
Enter input text: Hello how are you welcome to Tutorialspoint 26 31 42
このように、find()メソッドをwhileループと組み合わせることで、パターンに一致する箇所をすべて順に処理できます。
まとめ
Javaにおける正規表現処理の基本的な流れは、「Pattern.compile()でパターンを生成 → matcher()でMatcherオブジェクトを取得 → find()やgroup()で照合結果を取得」というステップです。これらを組み合わせることで、文字列の検証・抽出・置換といった処理を強力かつ簡潔に実装することができます。
-
JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説
StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T
-
Pythonの正規表現とは?基本の考え方と主な使い方をわかりやすく解説
正規表現とは何か 正規表現(Regular Expression)とは、文字列の中から特定のパターンを検索したり置換したりするために用いられる、文字の並び(パターン)のことです。シンプルに言えば、「文字列の中から目的のパターンを見つけ出し、必要に応じて書き換えるための記法」と理解するとよいでしょう。 正規表現はPythonだけでなく、Perl、R、Javaなど、ほとんどのプログラミング言語でサポートされており、テキスト処理における共通の基礎技術となっています。 正規表現が活躍する場面 正規表現は、ソースコード、ログファイル、スプレッドシート、さらにはドキュメントといったテキストデータから情報