便利な正規表現のご紹介~その2~

こんにちは。エンジニアの草野です。

業務上個人的によく利用している正規表現についてのご紹介第2弾となります!

前回はログ解析時に利用してる正規表現についてご紹介しましたが、
今回は文字列加工によく利用する正規表現について説明します。

目次

1. 1行を特定の文字列で囲む

まずは1つの行を特定の文字列で囲む正規表現による文字列加工です。

○検索文字列
^.*$

○置換文字列
'$0',

上記のように検索文字列と置換文字列を設定し、
一括置換をすることで下記のような置換が可能です。

○Before
aaaa
bbbb

○After
'aaaa',
'bbbb',

用途としては、csvなどで大量に渡されたIDなどを一括で置換し、
SQLのIN句に利用できるように加工する、などがあります。
※最後の,が邪魔ですが…
上記で利用している正規表現の中で新しく出てきたものを解説します。

$0正規表現にマッチした文字列全体を表します。

上記例では、
^.*$
にマッチする文字列のため、
「任意の文字列が0文字以上続く行」を指します。

上記から、今回の正規表現によるを文章にすると、

「任意の文字列が0文字以上続く行」

‘「任意の文字列が0文字以上続く行」’,
に置換する

と、なります。
この正規表現による置換は様々な文字列加工に応用できます。

2.文章内の特定文言を置換

早速ですが、追加での正規表現のご紹介です。

$1
$2
$3
それぞれ、
1番目にマッチした文字列
2番目にマッチした文字列
3番目にマッチした文字列
を表します

この正規表現をどのように利用するかというと、前回ご紹介した()と合わせて利用します。
便利な正規表現のご紹介~その1~
いくつか例です!

2-1.単純な置換

例1
○検索文字列
^(.*)abc(.*)$

○置換文字列
$1bbb$2

こちらの例は文中のabcという文字列を探し出し、bbbに置換するというものです。
これを利用することで文中の特定文字列を別の文字列に置換することが可能です。
ただ、この書き方だと1行に複数回abcが存在する場合、最後の1つしか置換されません。
全てのabcを置換するためには下記のような置換をする必要があります。

2-2.単純な置換(複数回出現対応)

例2
○検索文字列
^(.*?)abc(.*?)$

○置換文字列
$1bbb$2

まずは新しい正規表現があるので解説です。

*?基本的には*と同じで、直前の文字が存在しない、または直前の文字が1個以上連続する場合にヒットする正規表現となります。
ただし、?が付くことで最短一致となります。

上記の*?を利用することで、条件に合う最短の部分に一致します。
例えば、
zzzzabczzzzabc
という文言の場合、
1回目の検索で
zzzzabczzzzabc
2回目の検索で
zzzzabczzzzabc
がマッチします。
そのため、この正規表現による置換であれば
1行に複数のabcという文字列がある場合でも一括で置換が可能です。
※前回の説明では省略していましたが、
*単体の場合は最長一致となるため、最後方のabcがマッチします

2-3.特定条件での置換

次の例です!

例1
○検索文字列
090-(.*)

○置換文字列
080-$1

今までに説明した正規表現のみを利用しているため、大体はどうなるか予測がつくかと思います。
文章にすると、

090-から始まる文字列を080-「090-以降」に置換する
※「090-以降」は()でくくっているため$1として表現が可能

となります。
このように()と$1、$2をうまく活用することで、
文字列内の一部分のみを書き換えることが容易に可能です。
データの一括補正などが必要な場合に利用すると、
作業工数を大幅に短縮することが可能となります。

3. おわりに

いかかだったでしょうか?
正規表現による検索や置換は非常に便利で様々なことに利用ができるため、
既に利用している方も多いと思います。
今回ご紹介した中に1つでも新しい知識となるものがあれば幸いです!

何か思いついたらその3ができることもあるかもしれません。
その際には、また見ていただけるとありがたいです!

関連記事

プロジェクトストーリー

おすすめ記事

技術

コメント

この記事へのコメントはありません。

カテゴリー

TOP
TOP