この記事は ウェブクルー Advent Calendar 2017の19日目の記事です。
昨日は@a_tamuraさんの「使ってもらえるシステムが作るためには」でした。
#背景
仕事でテストデータ(100万件)を変換する時に使用したため。
数年前に正規表現について勉強したが忘れたため、調べて試した内容を記述。
#試したエディタツール
- サクラエディタ
- Visual Studio Code
#変換前のデータ
idが1から順番に振られていたデータ
INSERT INTO user(id,name,rank) values(1,'テスト太郎','上')
INSERT INTO user(id,name,rank) values(2,'テスト花子','上')
INSERT INTO user(id,name,rank) values(3,'テスト三郎','並')
INSERT INTO user(id,name,rank) values(4,'テスト五郎','特')
#こんなデータにしたい
idが100万+1から順番に振られているデータにしたい
INSERT INTO user(id,name,rank) values(1000001,'テスト太郎','上')
INSERT INTO user(id,name,rank) values(1000002,'テスト花子','上')
INSERT INTO user(id,name,rank) values(1000003,'テスト三郎','並')
INSERT INTO user(id,name,rank) values(1000004,'テスト五郎','特')
#やり方
検索条件:(\d)
置換文字列:1000000$1
#解説
$1というものは、検索条件にて**()**内で使用した文字列をそのまま使う。
今回の件だと「¥d」つまり「数字一文字」である。(0~9まで)
#()内について
**()**内は正規表現でなくとも構わない。
固定されている文字列の場合なら、固定文字列で良い。
例えば、上記の変換後のデータで、「テスト~~」を「テスト・D・~~」に変換したい場合、
検索条件:(テスト)
置換文字列:$1・D・
とすれば「テスト・D・太郎」「テスト・D・花子」・・・と変換することができる。
#複数使いたい場合
「$1」の1は一つ目という意味なので、二つ目のマッチした文字列を使いたい場合は「$2」という感じでドル以降の数字を増やしていけば良い。
#早い話
正規表現で **()**で囲んだ文字列は $1で使えるよ!!
**()**内は正規表現じゃなくても文字列でも大丈夫だよ!
だから今すぐ **()**で囲んでみてね!!!