6
10

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.

Visual Studioで正規表現を使ってラクラク検索・置換

Posted at

#Visual Studioでコード編集

配列要素array[0], array[1], array[2]...を使っていたが仕様変更により配列arrayのかわりに配列listを使うことに。さらに要素指定[i]も使いたくない

つまり

array[0] = machin;
  ...
array[1] = toto;
  ...
array[2] = hoga;
 ↓
list = machin;
  ...
list = toto;
  ...
list = hoga;

##置換は便利

vs.PNG

たとえばarray→list程度の変換であればCtrl + F→ 左上の矢印クリックで展開し、置換したい文字列置換後の文字列を記し、ひたすらクリック置換(Alt + R)または全て置換(Alt + A)

##正規表現を使わないと

置換したい要素数が大きい場合、もちろん全て置換をしたいところですが意図しない文字列まで置換されるのは困ります。(例えばarrayGroupという名前の変数がある場合。)Alt+Wで条件を絞るのもありですが、検索条件に柔軟性をもたせたい場合、正規表現を使った検索が有効です。

また、配列のインデックスを削除したい場合、[,数字,]に分けて検索したらヒット数が多すぎるし手間かかりすぎて論外。[0],[1]…のように順番に検索して空文字""と置換するのもナンセンスだしそもそも検索・置換の意味が無いので論外。

そこで正規表現です

#正規表現とは

Visual Studioでの正規表現 https://msdn.microsoft.com/ja-jp/library/2k3te2cs.aspx

さらに発展させればリンク内にあるようにコード内の任意の文字列を置換することができそうだけどここでは深く入りません。

#確認バージョン

Visual Studio 2015
正規表現なのでかなりいろんなとこで使えるはずです。

##基本

vs.PNG
Alt + Eまたは一番下列左から三番目の.*ボタンをクリック。

  • 基本的に+,[,(など特殊文字・表現のきっかけとなりそうな文字を文字列として検索したい場合は\でのエスケープが必要。逆にカッコ終わり],)はエスケープ必要なし。

##例
ここではいくつか実際に使った例をピックアップ

###[0] ~ [99]を一括で削除

検索文字:\[(\d|\d\d)]

####解説
※注 |をリスト作成のmdの都合で使えないため::で代用

目的
記号を文字列として探したい \+表現したい文字 \[ \(
2つの表現いずれかに一致したものを探したい(or検索) (a::b) (\d::\d\d)
任意の数字を探したい \d 同上。この例は「一桁又は二桁の数字を探したい」と同義

###型intを型doubleに置換したいがclass intMachinの名前は変えたくない

検索文字:int(?!Machin)

####解説
(?!文字列)を文字列のあとにつけるとその文字列を含んだ表現を結果から排除してくれる。
この場合intMachinintと書いた場合は最初のintMachinは無視され、sのあとのintが結果として出ることに成る。

#結果
規則性のあるものを一気に置換したいときは便利
他にも便利な式が多いので
https://msdn.microsoft.com/ja-jp/library/2k3te2cs.aspx
をチェックすることをおすすめ。

6
10
0

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
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?