正規表現は、文字列を検索や置換などする時に指定するパターン文字のことです。
正規表現について
正規表現は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ソースコード中に正規表現パターンを指定する場合は、エスケープ処理したパターンを指定してください。
コメント