正規表現置換の考え方

正規表現

目次

基本

下記の文字列があります。

あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの

上記の文字列を逆順(あいうえお→おえういあ)に並べ替える場合、
以下の正規表現を使用します。

置換前:

^(.)(.)(.)(.)(.)$

置換後:

$5$4$3$2$1

↑各行の5文字が逆順に入れ替わっていることが確認できます。

正規表現を使用しない文字列置換では、この動作を一発で行うことはできません。

解説

置換前に指定した「^(.)(.)(.)(.)(.)$」は、5文字の行という意味です。

・「^」……行頭を表します
・「.」……なんでもいいから1文字
・「$」……行末を表します

ただの5文字の行という意味でしたら「^.{5}$」という表現が最も簡単なのですが、あえて「.」を「()」で括って5回記述しているところに重要な意味があります。

カッコで括られた正規表現にマッチした文字列は、置換後に「$1」「$2」という記述することで呼び出すことができます。

つまり、「^(.)(.)(.)(.)(.)$」にマッチする文字列は、
1つ目のカッコ内の文字 → $1
2つ目のカッコ内の文字 → $2
3つ目のカッコ内の文字 → $3
4つ目のカッコ内の文字 → $4
5つ目のカッコ内の文字 → $5

と記述することで、置換後に呼び出すことができます。

今回、置換後の文字列を「$5$4$3$2$1」にしているため、上記にマッチした文字列は、

置換前の5文字目 → 置換前の4文字目 → 置換前の3文字目 → 置換前の2文字目 → 置換前の1文字目
と並ぶようになります。

つまり、逆順並び替えです。

この置換時におけるカッコの機能をキャプチャと言います。

使用例

先ほどの解説で使用した例はあまり実用的ではありませんでしたが、キャプチャは以下のような場合に有効です。

  • 電話番号の置換
  • 郵便番号の置換
  • 日付のフォーマット

郵便番号

下記は郵便番号を表す文字列です。

1234567
2345678
3456789
4567890

これらを画面表示用に「〒123-4567」の形式に置換します。

置換前:

^(\d{3})(\d{4})$

置換後:

〒$1-$2

「^(\d{3})」は前方3桁の数字を表します。
「(\d{4})$」は後方4桁の数字を表します。

置換前の前方3桁と後方4桁を別のカッコで囲み、置換後を「$1-$2」とすることで、間に「-」を挿入できます。

先頭に「〒」を付ければ完成です。

電話番号

下記は電話番号を表す文字列です。

09012345678
08098765432
07087654321
05076543210

これらを画面表示用に「090-1234-5678」の形式に置換します。

置換前:

^(\d{3})(\d{4})(\d{4})$

置換後:

$1-$2-$3

「3桁」「4桁」「4桁」に区切ってキャプチャし、「$1-$2-$3」と間に「-」を入れることで電話番号に整形します。

日付

日付を表す以下の文字列があります。

2020/02/04 12:13:14
1987/12/08 06:54:19
2005/07/13 22:06:09

これらを別フォーマットである「2020年02月04日 12時13分14秒」に置換します。

置換前:

^(\d{4})/(\d{2})/(\d{2}) (\d{2})\:(\d{2})\:(\d{2})$

置換後:

$1年$2月$3日 $4時$5分$6秒

上2つの例と同じく、キャプチャしたい箇所をカッコで囲みます。
「年」や「分」などは置換後に直接記述します。

正規表現置換を用いない「/」「:」の単純な置換では、このような置換を一発で行うことはできません。

まとめ

今回は正規表現置換の基本中の基本であるところの、キャプチャについてお伝えしました。

正直、この正規表現置換を使いこなせないと、正規表現を覚えるメリットはほとんどありません。

キャプチャを用いた置換を使いこなすことができれば、作業効率を大幅にアップさせたり、手作業によるミスを少なくすることができます。

いろんな場面で使って場数を踏んでいきましょう!

正規表現についての別記事についてもご覧ください!

★検索
パスワードの正規表現の考え方
「~を含まない行」を検索する方法
「~を含む行」を検索する方法
「~で終わる」を検索する方法
「~で始まる」を検索する方法
正規表現繰り返しの考え方

最短一致検索を行う方法
否定の文字クラス
「または」検索を行う方法

環境による「\d」の動作の違いについて検証

★置換
正規表現置換の考え方
大文字⇔小文字変換を行う方法
キャメルケース⇔スネークケース変換を行う方法
CSVを囲みなし⇒囲みありに変換する方法

CSVファイルの特定のカンマ以降を削除する方法
CSVファイルの必要な箇所だけ残す方法
数字3ケタおきにカンマを挿入する方法
正規表現置換で不要な行を削除し、必要な行だけ残す方法
数字を0埋めする方法
0埋めされた数字を0埋めなしに変換する方法
ファイル名から、拡張子のみを抽出する方法
Javaで正規表現置換を行う方法

また、Udemyという動画教育プラットフォームで動画解説を行っております。
動きを確認しながら丁寧に学習したいという方は、ぜひご覧ください!

正規表現入門 作業効率アップに役立つ38個の方法

コメント

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