正規表現を用いてファイル内検索をする方法
2024 / 02 / 08
正規表現で検索できるのが便利すぎるので、まとめました。
そもそもどんなときに使うの?見出し「そもそもどんなときに使うの?」
私が正規表現を用いたファイル内検索に出会ったのは、『使いにくいヒューマンインターフェースの館』のHTMLバージョンをホームページ上に埋め込んでいる時でした。
「使いにくいヒューマンインターフェースの館」ではそれぞれのスライドが個別のHTMLファイルとなっており、ページを遷移することでスライドの動作を再現しています。
ここで
のように遷移先を指定していたのですが、実際にホームページとしてビルドした際のURLは、
であることが判明したのです。
数カ所であれば「まぁ頑張ればいっか」と思えるかもしれないけど、35ファイル64ヶ所も…
VSCodeで正規表現使えたらなぁ…と思いながらダメもとで調べたら、当然のように実装されていました。笑
正規表現で検索する方法見出し「正規表現で検索する方法」
VSCodeでは cmd + F
でファイル内検索
cmd + shift + F
または左上の「虫眼鏡マーク」でファイル横断検索ができます。
ただしこのままでは正規表現を用いた検索はできません。
検索窓の右側にあるオプションのうち、一番右側にある .*
をクリックして有効にします。
これで準備が整いました!
実際に検索見出し「実際に検索」
今回の例では slide1.html
のように可変部分が数字なので、数字を表すd
と2けたの数字も含むので、それを複数回繰り返すという意味の+
で検索します。
具体的には検索窓に
といれて検索します。
すると条件に一致する部分が全て検索結果として表示されるはずです!
置換してみる見出し「置換してみる」
じゃぁ早速置換しよう! と思って、置換文字列を入れようとしたときにあなたは気づくでしょう。
あれ、せっかくの数字、反映できなくね…?
そうです。今のままでは検索した文字列がそのまま全て置換され、次のようになってしまいます。
そう、全てslide1
になってしまいました。
しかし、当然ですが、これも解決策があります。
正規表現で一致した部分を、置換でそのまま用いる見出し「正規表現で一致した部分を、置換でそのまま用いる」
まずは検索文字列の正規表現部分を()
で囲みます。
次に置換する文字列の対応する部分を$1
に書き換えます。
これで置換結果に一致部分が反映されているはずです。
複数箇所に正規表現を用いた場合見出し「複数箇所に正規表現を用いた場合」
先ほど利用した$1
は()
で囲った正規表現の順番に対応しています。
なので3個目の()
を利用したかったら$3
とすることで利用することができます。
ちなみに()
の中身は正規表現である必要はありません。
なので「検索した文字列の前に何か追加したい」といういうようなときにも利用出来ます。
Xcodeの場合見出し「Xcodeの場合」
Xcodeの場合には正規表現をGUIから挿入することができるので、正規表現を調べる手間がかかりません。また正規表現をどうしても用いたい場合には、用いて検索することももちろん可能です(さすがApple)。
GUIで挿入見出し「GUIで挿入」
検索窓の右側にある+
を押すと挿入できるものの一覧が表示されます。そこから検索条件にマッチするものを選択すれば完了です!
また当然$
を用いた置換も行えます。このとき()で囲う必要はありません。
正規表現を用いる見出し「正規表現を用いる」
もしかしたらGUIからの方法では満足できない方もいるかもしれません(実際にはGUIでは拡張性に問題がある?かもしれない?)。
XCodeで正規表現で検索するには検索窓の右側、Contains
の部分をクリックし、Regular Expression
を選択します。
使い方はVSCodeと一緒ですが、同時にGUIのものも利用可能です。