正規表現を使ったソースコード検索の例をいくつか
IDE(統合開発環境)、便利ですよね。システム開発の生産性を高めるツールとして欠かせないものです。昨今(2025年)では、使わないで開発する現場なんてまずないでしょう。ただ、ごくまれに、統合開発環境を使わないで、プログラムを読まないといけない時もあるかもしれません。そのような時、便利なのはやはり検索機能です。そして、その検索機能をフルに活用するために必要なのは、正規表現です。
ということで、ちょっと強引かもしれませんが、本記事では、正規表現を使って検索するテクニックをいくつか紹介したいと思います。
あくまでも筆者が実際に現場で使ったことがあるテクニックをいくつか紹介する記事だと思って読んでいただければと思います。
もし、体系的な知識が学びたい場合は、専門の書籍やMDNのサイトを参照してください。
では、さっそく始めましょう。
複数キーワードを同時に検索する
通常、何かを検索するときは、特定のキーワードをひとつだけ指定して、それを検索すると思います。しかし、正規表現を使用することで、複数のキーワードを同時に検索することができるようになります。
以下のような構文で検索することで、複数キーワードを同時に検索することができます。
構文:(キーワード1|キーワード2)
構文:(キーワード1|キーワード2|キーワード3)
まず、全体をマルカッコで囲います。そして、その中で検索したいキーワードを縦線で区切って複数並べるだけです。とてもシンプルです。
この方法で検索することで、指定したキーワードのいずれかに該当する箇所が全てヒットします。
この方法は、検索対象となるテキストが膨大な時に効果を発揮します。一度の検索で数分も数十分もかかるときは、キーワードひとつひとつにその時間をかけているとトータルで膨大な時間がかかります。
しかし、一度に複数キーワードを検索できれば、一回分の検索時間だけで必要なキーワードを全て検索することができます。
たとえば、数十万ステップもあるようなシステムのソースコードを検索するときなどは、この方法を使うことで検索時間を大きく短縮できるかもしれません。
指定したインデントの行を検索する
次は、行の冒頭に、指定した数のインデント(スペース)が付与された行を検索する方法です。
プログラムのソースコードであれば、インデントを使用して処理の階層を表現することはよくあります。そのため、ある処理ブロックの開始位置や終了位置を、インデントで判断することが考えられます。
行の始めに指定した数のスペースがある箇所を検索するには、以下の構文で検索します。
構文:^[ ]{4}\S
数字の4はスペースの数なので、必要に応じて変えて使ってください。スペースが8つであれば8ですし、スペースが1つだけなら1と指定すれば良いです。
この構文を解説すると、まず冒頭に「^」がありますが、これは行の先頭を意味しています。よって、この構文は、行の先頭に「[ ]{4}S」がある、という意味になります。
次に、「[ ]」の部分です。これは、半角スペースを角カッコで囲っています。角カッコは、その中にある文字のどれか、という意味です。「[abc]」であれば、「a」と「b」と「c」のうちのどれか、という意味になります。この場合は、半角スペースしか入っていないので、半角スペースを意味しています。
その次に続く「{4}」は、直前にある文字が4つ続く、という意味です。先述の通り、4を他の数字に変えると、その文字数だけ続くという意味になります。ここでは、直前の文字は「[ ]」になるので、半角スペースが4つ続く、という意味になります。
最後に「\S」があります。これは、スペース文字以外という意味です。ここでいうスペース文字は、半角スペースだけではなく、タブも含みます。正確に何が該当するかはMDNのホームページを見てください。スペースやタブ以外の文字を表すときに「\S」を使用します。なお、Sを小文字にすると、スペース文字を表すようになります。正規表現では大文字小文字の区別が重要なので注意しましょう。
キーワードの後に「.」(ピリオド)が続く箇所を検索する
キーワードの後に「.」(ピリオド)が続く箇所、というと少しわかりにくいかもしれません。まず、この意味を正確に理解するため、例を見てみましょう。
文章:I have a pencil, but I don’t have a pen.
上記の文章に対して、キーワード「pen」で検索を行うと、2箇所ヒットします。1つ目は「pencil」の最初の3文字、2つ目は末尾にある「pen」です。このうち、2つ目に関しては「pen」の後に「.」(ピリオド)が続きますが、1つ目は「cil」と続きます。
キーワードの後に「.」(ピリオド)が続く箇所を検索するというのは、この例でいうと、2つ目の「pen」だけを検索するような方法ということになります。
このような検索を行うには、以下の構文を使用します。
構文:pen(?=\.)
「pen」は検索したいキーワードなので適宜変更してください。
「pen」の後に「(?=\.)」という部分があります。これは、penの後に「.」(ピリオド)が続く、という意味になります。「(?=キーワード)」という構文が、キーワードが後に続くということを意味します。このキーワードの部分に、「\.」と入れることで、ピリオドが続くということを表現できます。
なお、ピリオドの前に「\」(バックスラッシュ)が入っていますが、これはエスケープ文字です。正規表現におけるピリオドには、任意の一文字を表す、という特殊な意味があります。そのため、本当にピリオドを表したい場合には、特殊な意味ではないということを示すためのエスケープ文字を直前につける必要があります。
キーワードの後に「.」(ピリオド)が続かない箇所を検索する
直前の項で、キーワードの後にピリオドが続く構文を紹介しました。次は、ピリオドが続かない箇所を検索する方法です。
構文:pen(?!\.)
先の構文との違いは、「?」の後が「=」から「!」になっただけです。「(?!キーワード)」が、キーワードが後に続かない、という意味の構文であるため、キーワードの部分にピリオドを入れるだけで、ピリオドが後に続かないということを表せます。
メソッドの第一引数を検索する
プログラム言語によってメソッドの引数の指定方法は変わってくると思いますが、ここでは、JavaやJavaScriptのようなメソッドの記法を前提とします。
すなわち、以下のメソッドの記法例のように、マルかっこで囲われた中に複数の引数がカンマ区切りで指定される形式です。
メソッドの記法例:method(args1, args2, args3)
本項では、上記の記法例における「args1」を検索する方法を解説します。
構文は以下の通りです。
構文:(?<=\()[^,]+
最初にある「(?<=\()」は、検索する文字の前に、引数を囲む開始カッコがあることを表しています。「(?<=キーワード)」が直前にキーワードがある、という意味になります。このキーワードに開始カッコを入れることで、開始カッコに続く箇所を検索できます。
かっこの直前についているバックスラッシュはエスケープ文字です。マルカッコは正規表現において特別な意味を持つ記号であるため、純粋にカッコを表したい場合は、エスケープ文字をつける必要があります。
次の「[^,]」ですが、これは「,」(カンマ)を除く任意の1文字を表します。角カッコを使用すると、その中に記載された文字のうちのどれか、という意味になります。また、「^」は否定の意味があるため、「^,」とすることでカンマ以外という意味になります。これを組み合わせることで、「,」(カンマ)を除く任意の1文字を表します。
最後の「+」は、直前の文字が1文字以上続く、という意味です。この場合の直前の文字は「,」(カンマ)を除く任意の1文字ですので、組み合わせると「,」(カンマ)を除く任意の文字が1文字以上続くという意味になります。
ここまでを全てまとめると、直前に「\(」があり、「,」(カンマ)を除く任意の文字が1文字以上続く箇所という意味になります。これで、メソッドの記法例に記した「args1」が検索することができます。
おわりに
この記事では、筆者が実際に使っている正規表現のパターンをいくつか紹介しました。正規表現でできることは、この記事で紹介したこと以外にもたくさんあります。まずは、この記事で紹介したテクニックを活用してみた上で、もしそれらが役に立ったのであれば、ぜひ体系的な知識習得を目指してみてほしいと思います。