126
97

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ウェブクルーAdvent Calendar 2017

Day 19

正規表現で置換時にマッチした文字をそのまま使う

Last updated at Posted at 2017-12-18

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

#参考文献
https://www.graffe.jp/blog/1688/

126
97
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
126
97

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?