Java アドバンス

Java 正規表現

1. 正規表現(Regular Expression)とは

正規表現(Regular Expression / Regex)とは、テキスト内でのデータ検索に使用する「検索パターン」を形成する一連の文字列のことです。

正規表現は、単純な一文字から複雑なパターンまで定義でき、あらゆる種類のテキスト検索およびテキスト置換操作に使用されます。

Javaには組み込みの正規表現クラスはありませんが、java.util.regex パッケージをインポートすることで利用可能です。このパッケージには、主に以下のクラスが含まれています。

  • Pattern クラス: 検索に使用するパターンを定義します。
  • Matcher クラス: パターンを使用して検索を実行するために使用されます。
  • PatternSyntaxException クラス: 正規表現パターンの構文エラーを示します。

2. コード例:特定の単語の検索

文章の中に "volardev" という単語が含まれているかどうかを判定する例を見てみましょう。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
  public static void main(String[] args) {
    // Pattern.compile() で検索パターンを作成(第2引数で大文字小文字を区別しない設定)
    Pattern pattern = Pattern.compile("volardev", Pattern.CASE_INSENSITIVE);
    
    // matcher() で対象の文字列を検索
    Matcher matcher = pattern.matcher("Visit Volardev!");
    
    // find() でパターンが見つかったかどうかを判定
    boolean matchFound = matcher.find();
    
    if(matchFound) {
      System.out.println("マッチしました");
    } else {
      System.out.println("マッチしませんでした");
    }
  }
}
// 出力: マッチしました

2.1 コードの解説

この例では、文章の中から "volardev" という単語を検索しています。

  1. まず、Pattern.compile() メソッドを使用してパターンを作成します。最初のパラメータは検索するパターンそのもの、第2パラメータ(オプション)には検索方法を指定するフラグ(ここでは大文字小文字を無視する設定)を渡します。
  2. 次に、matcher() メソッドを使用して、指定した文字列内でパターンを検索します。これにより、検索結果の情報を持つ Matcher オブジェクトが返されます。
  3. find() メソッドは、パターンが文字列内で見つかった場合に true、見つからなかった場合に false を返します。

3. フラグ(Flags)

compile() メソッドで使用するフラグにより、検索の動作をカスタマイズできます。

フラグ説明
Pattern.CASE_INSENSITIVEアルファベットの大文字と小文字を区別せずに検索を行います。
Pattern.LITERALパターン内の特殊文字をリテラル(ただの文字)として扱います。
Pattern.UNICODE_CASECASE_INSENSITIVE と併用し、英語以外のアルファベットの大文字小文字も無視します。

4. 正規表現パターン(ブラケット)

Pattern.compile() の第1パラメータに指定するパターンでは、ブラケット(角括弧)を使用して文字の範囲を指定できます。

説明
[abc]a、b、c のいずれか 1 文字を検索
[^abc]a、b、c 以外のいずれか 1 文字を検索
[0-9]0 から 9 までの数字 1 文字を検索

5. メタ文字(Metacharacters)

メタ文字は、特別な意味を持つ文字です。

メタ文字説明
|| で区切られた複数のパターンのいずれかに一致するものを検索する。例:cat|dog|fish
.任意の 1 文字に一致
^文字列の先頭で一致(例: ^Hello
$文字列の末尾で一致(例: World$
\d任意の数字 1 文字([0-9] と同等)
\s任意のホワイトスペース(空白)文字
\b単語の境界を検索(例: \bWORD は先頭、WORD\b は末尾)
\uxxxx16進数 xxxx で指定された Unicode 文字

6. 量指定子(Quantifiers)

量指定子は、文字やパターンの出現回数を定義します。

量指定子説明
n+1 つ以上の n を含む文字列に一致
n*0 個以上の n を含む文字列に一致
n?0 個または 1 個の n を含む文字列に一致
n{x}x 個の n が連続する文字列に一致
n{x,y}x 個から y 個の n が連続する文字列に一致
n{x,}少なくとも x 個以上の n が連続する文字列に一致