正規表現
正規表現(Regular Expression)とは文字列を特定のパターンで表す非常に強力なフォーマットです。
正規表現を用いる事で文字列を式として扱うことができる為、文字列に対して柔軟な検索や置換を行う事が可能となります。
この正規表現はJava特有の技術というわけではなく、テキストエディタや検索エンジンなどでも採用されている一般的なフォーマットです。
検索と置換
文字列の処理の中で検索と置換に関する処理は頻繁に行われます。
例えば、特定の単語を別の単語に置換する、区切り文字を検索して分割するなどが考えられます。
一般的な文字列の検索・置換では完全一致によるマッチングしか行う事ができます。
しかし、"Java"(または"JAVA")または"Java言語"のように似たような単語でありながら文字列としては異なる文字列をまとめて処理したい場面があります。
このような時、正規表現を使うことで特定のパターンである文字列を式として表すことができるのです。
メタキャラクタ
正規表現では幾つかの文字をメタキャラクタと呼び、特別な意味を持ちます。
次の表はメタキャラクタの一例です。
. | 改行文字を除く任意の1文字 |
[] | []の中に含まれている任意の1文字 |
[^] | []の中に含まれていない任意の1文字 |
* | 直前の文字が0以上の連続した並び |
+ | 直前の文字が1以上の連続した並び |
? | 直前の文字が1個、または0個 |
\d | 数字[0-9] |
\D | 数字以外[~0-9] |
この他にも|(パイプ)を使うことで"または"を表すことができたりします。
正規表現のサンプル
これらの表現はある程度なれてしまえば簡単に応用できますので、例を幾つか見て覚えていきましょう。
RegularExpressionまたはRegular Expression
"Regular *Expression"
間に半角スペースがないまたは1以上の半角スペースがある場合にマッチする正規表現です。
No01〜No99
"No\d\d"
\dは数字(0-9)とマッチするので、2桁の数字を検索したいのであれば2つ続けて記述すれば表現できます。
20XX/MM/DD
"20[0-9][0-9]/[01][0-9]/[0-3][0-9]"
完全には絞り込むことができませんが、日付のフォーマットをある程度絞り込むことができます。