9
7

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.

grepの際に便利な正規表現のメタ文字

Last updated at Posted at 2016-12-06

1分で実現できる有用な技術 Advent Calendar 2016が空いていたので、飛び入り参加しました。

システム開発にあたって、真にプログラムを書いている時間と匹敵するぐらいに、「あれはどう書いたかな」と探す作業が発生します。そんな場面できっと役に立つ、正規表現のメタ文字を紹介します。

grepで引っかかる邪魔者

プロジェクトディレクトリ全体で「何か探しものをしたい」といえば、たいていgrepの出番ですが、単なる文字一致で検索しても意図しないものが大量に引っかかってしまいます。たとえば、sign_inで検索すればsign_in_and_redirectにもヒットしてしまいます。とはいえ、「うまくヒットする条件」を考え出すと、そっちのほうが手間になります。

お手軽な区切り文字

そんなときに、\bというメタ文字が役に立ちます。これは、「単語の端っこ」という位置にヒットする(文字と対応しない)メタ文字です。\bsign_in\bとして検索すれば、「sign_inの前後で単語が切れているもの」というような検索になります。GNU grepでは-Eなしですら使えるなど、多くの正規表現実装が対応しています。

注意点

「人間がgrepするときにノイズを減らす」という用途を考えればあまり問題ないですが、この正規表現にはいくつか注意すべき点があります。

  • 「単語」を構成する文字は(ASCIIの範囲内では)通常「英数字とアンダーバー」です。HTMLやCSSのクラスに入るハイフン、言語によっては変数名に使える$など、「切れ目」と認識されるために除ききれないものもあります。
  • 全角文字についてはRuby内ですらエンコードによって異なるなど、ASCII外でどの文字を「単語」の要素とするかは実装によってまちまちです。もっとも、大半のプログラムでは識別子にASCIIの文字列しかほぼ使わないでしょうし、本稿のような用途では実用上問題ないと思います。
9
7
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
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?