正規表現

作業効率をあげる正規表現まとめ【プログラマ必見】

プログラム、システム保守でよく正規表現を使用します。
使っていないとすぐ忘れてしまうので、備忘録がてら残すことにしました。


行頭文字の置換

個人的によく使うのがこれです。
DBのデータをCSVでやりとりすることが多いのですが、そのCSVからINSERT文を作る際に利用します。

下記のようなCSVがあったとしましょう。

"01","みかん","愛媛県"
"02","りんご","青森県"
"03","なし","福島県"

上記のCSVをそのままSQLにしたいわけです。完成形は↓

INSERT INTO table1 VALUES ('01','みかん','愛媛県');
INSERT INTO table1 VALUES ('02','りんご','青森県');
INSERT INTO table1 VALUES ('03','なし','福島県');

最初にデータの前にINSERT~を挿入します。

置換前

^

 
置換後

INSERT INTO table1 VALUES (

 
「^」は行頭を表す正規表現です。
結果は下記のようになったはずです。これで前半部分はOK。

INSERT INTO table1 VALUES ("01","みかん","愛媛県"
INSERT INTO table1 VALUES ("02","りんご","青森県"
INSERT INTO table1 VALUES ("03","なし","福島県"

行末尾文字の置換

これもと同じ目的で使用します。1で前半部分にINSERT文を挿入しました。
あとは末尾に閉じかっこを入れたい。

置換前

$

 
置換後

);

 
「$」は行末尾を表す正規表現です。
結果は下記のようになったはずです。あとは使用するDBに応じてダブルクォーテーションをシングルクォーテーションに置換してください。

INSERT INTO table1 VALUES ("01","みかん","愛媛県");
INSERT INTO table1 VALUES ("02","りんご","青森県");
INSERT INTO table1 VALUES ("03","なし","福島県");

変数代入箇所の検索

これもよく使います。
最近のIDEにはフォーマッターがついているため、変数代入の記述は下記のように整形されます。

$var1 = "test";
$var1001 = "test";

「{変数名}␣=␣{値};」というような半角スペースが1文字入る形ですね。
上記の場合は、代入箇所を探すのに正規表現は不要です。

検索条件

$var1 = 

 
とすれば良いだけ。
しかしプロジェクトによっては、下記のようにインデントを合わせる文化が未だに残っています。ぼくは保守性が悪いから嫌いです。

$var1    = "test";
$var1001 = "test";

こうなってくると正規表現の出番です。

検索条件

var1 += 

 
「var1」の後ろの半角スペースが1回以上出現するもの、という探し方にすれば解決します。


変数比較箇所の検索

これはほぼ上記と同じなので詳細は割愛します。下記のようなサンプルソースから代入箇所を含めず、比較箇所のみ抽出します。

$var1    = 1;
if ($var1 == 1) print "1deR";
if ($var1 != 1) print "1denaideR";
if ($var1 >= 1) print "1ijodeR";

下記の条件とすることで、上記サンプルの1行目以外すべて抽出できます。

検索条件

var1 +[=!<>]= 

条件に一致しない箇所の検索

今度は「一定の条件で検索するが、一部除外したい」という場合。下記のようなソースがあったとします。

$var1    = 1;
if ($var1 == 1) print "1deR";
if ($var1 != 1) print "1denaideR";
if ($var1 >= 1) print "1ijodeR";
if ($var1 == 2) print "2deR";

探したいのはvar1の比較箇所、ただし、2との比較は探したくない。とうケース。
ちょっと例題がイマイチですが、ソース量が膨大だと使う場面は結構あります。

検索条件

var1 +[=!<>]= +[^2]

 
キャレット「^」は先頭に使うと行頭文字を意味しますが、否定の意味でも使われます。
こうすることで上記サンプルの2~4行目が抽出できます。


一部文字列を残して置換

こちらは別記事にしました。

 

 

ほかにも思いついたら追記します。


 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です