正規表現の基本的な使い方やサンプル
正規表現は単語や文字列を複雑に置換できる優れた方法です。
大文字や小文字、パターンなど複雑に一括変換できます。
正規表現は置換パターンを選択するために様々な種類の「メタ文字」が用意されています。この組み合わせにより、「Aが含まれるキーワード」「4桁の数字」「文字列の2文字列」など色々な置換ができます。
但し、正規表現は複雑で覚えるまでが一苦労です。一度にマスターすることは困難ですが、日々練習を積み重ねていくと、どんな複雑な文章でも自在に置換できるようになります。
まずは、基本的な使い方から覚えていくことをお勧めします。この記事では抑えておきたいポイントを解説します。
基本的なメタ文字
正規表現には様々な種類のメタ文字があります。まずは、基本的な使い方を覚えておくと後が楽です。特に良く使用するメタ文字は以下の6点です。
- または
- どれか
- 以外
- 文字の繰り返し
- 任意の1文字
- グループ化
または
「または」は置換する内容が1文字の場合は[]でそれぞれの文字を囲みます。
- AまたはZ → [AZ]
- 一またはニまたは三 → [一ニ三]
「または」は置換する内容が文字列の場合は「|」でそれぞれの文字を囲みます。
- アメリカまたはカナダ → アメリカ|カナダ
- 東京または名古屋または大阪 → 東京|名古屋|大阪
どれか
「あ~お」や「1~9」のような続き文字であれば「-」で繋いで指定できます。
- 「あ」~「お」のどれか1文字 → [あ-お]
- 「1」~「9」のどれか1文字 → [1-9]
以外
1文字や文字列を[]で囲みの先頭に^を付けます。
- A.B.C以外→[^ABC]
- りんご、みかん以外→[^(りんご)|(みかん)]
- 「あ」~「お」以外→[^あ-お]
文字の繰り返し
「*」や「+」は文字の繰り返しを意味します。
- 「*」は0回以上の文字の繰り返しを意味します。
- 「+」は1回以上の文字の繰り返しを意味します。
「はー*い」であれば「はい」「はーーい」「はーーーい」などが該当します。
「おー+い」であれば「おーい」「おーーい」「おーーーい」などが該当します。ちなみに「おい」は0文字ですので該当しません。
任意の1文字
任意の1文字を表すメタ文字は「.」です。特に「*」や「+」と組み合わせて使用することが多いです。
「ぶどう.*もも」であれば「ぶどうもも」「ぶどうともも」「ぶとうとお勧めのもも」のような使い方ができます。
「バナナ.+メロン」であれば「バナナとメロン」「バナナと美味しいメロン」のような使い方ができます。ちなみに「バナナメロン」は間か0文字ですので該当しません。
グループ化
()を使用すると文字をグループ化できます。
(パチ)+の場合は「パチパチ」「パチパチパチパチ」が該当ます。
もしもパチ+であれば「チ」を繰り返す意味になり、「パチチチ」になります。
文字をグループ化できると置換作業の効率が上がります。
メタ文字を無効化する
メタ文字自体を無効化して普通の文字として使いたい場合もあるはずです。
例えば、正規表現では「+」は文字の繰り返しを意味しますが「+」を文字として認識して欲しい場合は無効化する必要があります。
メタ文字の手前に「\」を記述します。
「5+5=10」の場合は「5\+5=10」と記述します。
1文字づつ無効化せずに文字列として、まとめて無効化する場合は以下のように記述します。
「東京都.+区.+町」の場合は「\Q東京都.+区.+町\E」と記述します。前に「\Q」後ろに「\E」を使用します。
最長一致と最短一致
正規表現で文字の繰り返しを意味する「*」と「+」は最短で繰り返しを終える場合と最長まで繰り返しを行いたい場合に分かれます。
- 最短を「最短一致」
- 最長を「最長一致」
最短一致を行う場合は「?」を使用します。
- 最短一致で1+?の場合→111111
- 最長一致で1+の場合→111111
- 最短一致で<.+?>の場合→<title>タイトル</title>
- 最長一致で<.+>の場合→<title>タイトル</title>
応用編
正規表現を使用して、複雑な文字の置き換えをしてみます。
()で囲った部分は正規表現では1番目のパターンとして認識されます。これを置換する際に使用できます。
例えば、(A+)(B+)(C+)だとします。
- 1番目のパターン(A+)
- 2番目のパターン(B+)
- 3番目のパターン(C+)
このようになります。では○番目のパターンを置換時に表示する場合は「$」を使用します。
- 1番目のパターン$1
- 2番目のパターン$2
- 3番目のパターン$3
このようになります。
もう少し分かりやすく表現すると、以下の例では()内の文字列を正規表現でそれぞれの番号を割り当てて$1や$2などで置換しています。
元の文書
DATE: 12/01/2017 22:26:49
—–
BODY:
<p>今日は2017/11/12の11:00
正規表現で検索
DATE: 12/01/2017 22:26:49
—–
BODY:
<p>(.+?)2017/(\d\d)/(\d\d)(.+?)(\d\d):(\d\d)
正規表現で置換
DATE: $2/$3/2017 $5:$6:49
—–
BODY:
<p>$1 2017/$2/$3$4$5:$6
置換後の文章
DATE: 11/12/2017 11:00:49
—–
BODY:
<p>今日は2017/11/12の11:00
このようにして正規表現で日時の置換が出来ました。
正規表現のまとめ
正規表現の基礎的な置換方法をご紹介しました。
覚えて慣れるまで難しいですが、一度マスターすれば生涯?使い続けられるスキルになるはずです。
まずは一通り覚えてから実際に使ってみて初めて身に付きます。少しずでも良いので毎日1時間程度勉強を続ければ、1ヶ月もしない内に完全に使いこなせていると思います。
ここで正規表現に使用されるメタ文字を一覧表示します。
「.」「*」「+」「?」「^」「[」「]」「|」「(」「)」「\」「$」
是非、正規表現を使用して作業効率を上げてください。