正規表現

正規表現(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以上の半角スペースがある場合にマッチする正規表現です。

Abstractで始まる単語

"Abstract.+"

.は任意の1文字で+は直前の文字が1以上です。よってAbstractで始まる全ての単語にマッチする正規表現になります。

JavaまたはJAVA

"Java|JAVA"

(パイプ)を使うことで2種類の文字列のどちらにもマッチするような正規表現となります。
H1またはH2またはH3

"H[123]"

[](ブランケット)を使うことで内側にある任意の文字と一致するような正規表現を記述できます。

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]"

完全には絞り込むことができませんが、日付のフォーマットをある程度絞り込むことができます。