正規表現(Regular Expressions)

正規表現は、文字列を検索や置換などする時に指定するパターン文字のことです。

正規表現について

正規表現はJavaに限らない一般的な仕組みで、
文字列パターンの検索、置換、抽出、チェックを簡単に行うことができます。

Javaでは java.util.regex標準パッケージで正規表現に関する機能が提供されています。

正規表現メタ文字一覧

主要な正規表現のメタ文字一覧です。
正規表現ではこれらメタ文字を組み合わせて正規表現パターンを作成します。

【正規表現 基本メタ文字】
記号意味
パターン文字列結果
^先頭にマッチする“^ab”“abcd”
“cdab”
true
false
$末尾にマッチする“ab$”“abcd”
“cdab”
false
true
.任意の1文字にマッチする“a.c”“abc”
“abbc”
“ac”
true
false
false
?直前の文字が0個または1個にマッチする“^A?$”“”
“A”
“AA”
“B”
true
true
false
false
*直前の文字が0個以上にマッチする“^A*$”“”
“A”
“AA”
“B”
true
true
true
false
+直前の文字が1個以上にマッチする“^A+$”“”
“A”
“AA”
“B”
false
true
true
false
[ ]いずれかの文字とマッチする“[ABC]”“A”
“B”
“D”
true
true
false
[-]いずれかの文字とマッチする
※文字を-でつなぐとその間の文字すべてが対象になります
“[3-7]”“2”
“3”
“4”
“8”
false
true
true
false
( )1つのグループとして扱う“(ABC)”“ABC”
“CBA”
true
false
{n}直前の文字にn回マッチする“^A{3}$”“AA”
“AAA”
“AAAA”
false
true
false
{n,}直前の文字にn回以上マッチする“^A{3,}$”“AA”
“AAA”
“AAAA”
false
true
true
{n,m}直前の文字にn回以上m回以下マッチする“^A{3,4}$”“AA”
“AAA”
“AAAA”
“AAAAA”
false
true
true
false
|いずれかとマッチする“ABC|DEF”“ABC”
“DEF”
“CBA”
“DE”
true
true
false
false
^否定([ ]の中で使用する)“[^AB]”“A”
“B”
“C”
false
false
true
&&かつ“[0-9&&[^4]]”“3”
“4”
“5”
true
false
true

よく使用されるパターンについては文字クラスとして定義されています。

【定義済み文字クラス】
記号意味
パターン文字列結果
\d半角数値(0~9)にマッチする
※ [0-9]と同じ
“\\d”“0123”
“0123”
“abc”
true
false
false
\D半角数値(0~9)以外にマッチする
※ [^0-9]と同じ
“\\D”“0123”
“0123”
“abc”
false
true
true
\w半角英数値(0~9、a~z、A~Z、_)にマッチする
※ [0-9a-zA-Z_]と同じ
“\\w”“012_AbC”
“12Ab”
“#$%&”
true
false
false
\W半角英数値(0~9、a~z、A~Z、_)以外にマッチする
※ [^0-9a-zA-Z_]と同じ
“\\W”“012_AbC”
“12Ab”
“#$%&”
false
true
true
\s空白文字にマッチする
※ [\t\n\x0B\f\r]と同じ
“\\s”“”
“a”
true
false
\S空白文字以外にマッチする
※ [^\t\n\x0B\f\r]と同じ
“\\S”“”
“a”
false
true

正規表現パターン例

よく使用される正規表現の例を上げてみました。
Javaソースコード中で正規表現パターンを指定する時はエスケープ済みの方を使用ください。

パターン正規表現パターンエスケープ済み
郵便番号(9999-999)^\d{3}-\d{4}$^\\d{3}-\\d{4}$
日付(YYYY/MM/DD)^\d{4}/\d{2}/\d{2}$^\\d{4}/\\d{2}/\\d{2}$
半角数値10桁^\d{10}$^\\d{10}$
半角数値8桁以上10桁以下^\d{8,10}$^\\d{8,10}$
半角英数字0文字以上^[0-9a-zA-Z]*$^[0-9a-zA-Z]*$
半角英数字1文字以上^[0-9a-zA-Z]+$^[0-9a-zA-Z]+$

サンプルソース

(例)”123Ab”が半角英数字のみであるかチェックする

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

public class RegexSample {

    public static void main(String args[]) {

        //判定する文字列
        String str = "123A5";

        //判定するパターンを生成
        Pattern p = Pattern.compile("^[0-9a-zA-Z]*$");
        Matcher m = p.matcher(str);

        //画面表示
        System.out.println(m.find());

    }
}
(実行結果)
C:\>java RegexSample true

文字列「123Ab」は、半角英数字のみなのでtrueとなります。

備考

  • Javaソースコード中に正規表現パターンを指定する場合は、エスケープ処理したパターンを指定してください。

コメント

タイトルとURLをコピーしました