へっぽこコーダーの備忘録

phpやらjavascriptやら、使った技術をすぐに忘れちゃうから、おぼえがき程度に書いていきまーす
2020.05.30

【秀丸-正規表現】特定の文字を残し前後を置換したい

秀丸エディターでの正規表現を使った置換方法です。

特定の文字は残したままで、前後のテキストだけを置き換えたいという場合がありますよね。
特に同様の形式のテキストが大量にあった場合は、エディタでスカッと一括置換したくなります。

しかし、なぜか秀丸エディタを使用した場合、うまくいかない。
そんなときのための備忘録。

結論:この2つの書き方でOK

結論としては、ここを抑えておけばOKです。

  • ・検索対象で残しておきたい文言を『(.*?)』で表現
  • ・置換後の表現では、残しておきたかった文言を『\1』『\2』などで表現

 

では、具体例を見ていきましょう。

まずは置換ウィンドウを開けよう

まず、秀丸エディタで置換する場合は、メニュー「検索」から「置換」を選択するか、ショートカットキー「Ctrl + R」で置換ウィンドウを表示させます。

置換ウィンドウ表示手順の画像

【置換ウィンドウ】

置換ウィンドウの画像
今回は置換に正規表現を使用するので「正規表現」にチェックを入れておきます。

正規表現を使った置換コード

置換例その1

〇置換前テキスト

山田君は「リンゴ」の甘いところが好きです。
田中君は「豚肉」の脂っこいところが好きです。
鈴木君は「野菜」のみずみずしいところが好きです。

〇置換後テキスト

食べ物の一つに「リンゴ」があります。
食べ物の一つに「豚肉」があります。
食べ物の一つに「野菜」があります。

置換内容は、食べ物の名前は残しつつ、前後のテキストを変換し、『食べ物の一つに「○○」があります。』というテキストに一括置換を行っています。

置換例その1 置換条件乳琉力の画像
検索欄に『(.*?)「(.*?)」(.*?)$』
置換欄に『食べ物の一つに「\2」があります。』
を入力し、『全置換』をクリックします。

置換例その1 置換結果の画像

これで一括置換が完了です。

置換例その2

〇置換前テキスト

山田君は「リンゴ」の甘いところが好きです。
田中君は「豚肉」の脂っこいところが好きです。
鈴木君は「野菜」のみずみずしいところが好きです。

〇置換後テキスト

山田君の好きな食べ物の一つに「リンゴ」があります。
田中君の好きな食べ物の一つに「豚肉」があります。
鈴木君の好きな食べ物の一つに「野菜」があります。

置換内容は、人名と食べ物の名前は残しつつ、前後のテキストを変換し、『○○君の好きな食べ物の一つに「○○」があります。』というテキストに一括置換を行っています。

置換例その2 置換条件乳琉力の画像
検索欄に『(.*?)は「(.*?)」(.*?)$』
置換欄に『\1の好きな食べ物の一つに「\2」があります。』
を入力し、『全置換』をクリックします。

置換例その2 置換結果の画像

これで一括置換が完了です。

では、コードの説明をみていきましょう。

正規表現説明

検索対象で使用している『(.*?)』は、何でもいいから文字の繰り返しっていう感じです。
先ほどの例でいうと、『(.*?)「(.*?)」(.*?)$』が表現している意味は、

  • ・1つ目の『(.*?)』:「より前にある文字の繰り返し。つまり『○○君は』に当たります。
  • ・2つ目の『(.*?)』:「」に囲まれている文字の繰り返し。つまり『リンゴ』などの食べ物名に当たります。
  • ・3つ目の『(.*?)』:」より後ろにある文字の繰り返し。つまり『の○○が好きです。』に当たります。
  • ・最後の『$』:これは文末を指しています。

次に置換後に使用している『\1』『\2』などは、先ほどの『(.*?)』が代入されるコードになっています。

  • ・1つ目の『(.*?)』の内容:『\1』に代入される。
  • ・2つ目の『(.*?)』の内容:『\2』に代入される。
  • ・3つ目の『(.*?)』の内容:『\3』に代入される。

といった具合です。

php等の正規表現と秀丸エディタの違い

秀丸では置換後の表現を『\1』『\2』などで表しましたが、phpなどでは『$1』『$2』といった具合で表現されます。
これが、今回筆者が、秀丸でうまく置換が出来ずにハマってしまっていたポイントでした。
みなさまもお気を付けください。

まとめ

プログラムコードを書いていると、大量に同一ルールでの置換をしなくていはいけない状況が多々あります。
1つずつ手作業で書き換えていくのには時間が掛かってしまいますが、今回のような正規表現を使用した一括置換を行えると、複雑な置き換えでも効率よく対応することができます。
大量のコードの書き換えは、スカッと一括置換で解決して、ストレスフリーなコーディング生活を送りましょう。