この記事は ウェブクルー 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で使えるよ!!
()内は正規表現じゃなくても文字列でも大丈夫だよ!
だから今すぐ ()で囲んでみてね!!!