Step by step 正規表現入門 - 英数字とエディターでの検索

正規表現を覚えるには、実際に使うことが大切です。 まずは正規表現を使ってみましょう。

そのための正規表現の最初のステップです。

英数字, _(アンダーバー)はそのまま

英数字とはアルファベット(a-z A-Z)、数字(0-9)です。また、プログラミングの変数名などには _(アンダーバー) も使います。これらは単語用文字と呼ばれ、正規表現ではそのまま使えます。

難しく考えることはなく、英数字 _ では正規表現による検索も文字列の検索と一緒ということです。
日本語対応しているものであれば、漢字のような全角文字も使えます。これらも英数字同様そのままの文字となります。

エディターの検索機能の使い方

いくつかのエディターで正規表現を使った検索の仕方を紹介します。

ここでご紹介したいのは通常のファイル内の検索ではなく、 フォルダー(プロジェクト)内の複数のファイルにまたがった検索です。 これは grep 検索と呼ばれることがあります。
こちらを中心に説明しています。

この grep 検索は正規表現を使わなかったとしても便利な機能なので、 これだけ覚えておいても損はないと思います。


ここにあげたエディターでなくても、高機能なエディターであれば、 正規表現による検索や置換の機能はまず付いていると思います。 ここでの記事を参考に自分の愛用のエディターで検索を試しながらやってみてください。

grep

と、いきなりエディターの説明ではないのですが、 grep は名前の由来となっているコマンドラインプログラムです。

これはこれで便利ですし、 Unix 系であればまずインストールされているので、 こちらの紹介もしておきます。

Windows 版もいろいろ公開されているので、インストールすれば使えます。
使い方は次のようになります。
grep [-i] 正規表現 ファイル [... ]
(例)
 $ grep include *.h *.cpp 
ファイルは複数指定が可能で通常 *.cpp のようなフィルターを使います。 後、オプションとして大文字小文字を区別しない -i をよく使います。

プログラムを実行すると検索結果の一覧が表示されます。

Emacs

Emacs では前節の grep を利用します。 M-x grepeshell 上で grep コマンドを実行します。

実行すると検索結果が別バッファでリストに表示されます。
ただ grep を実行するのと違い、このリストでマウスの中ボタンクリックや Enter キーを押すと結果位置にジャンプすることができます。



さらに私の作った lisp も使えば、検索位置へのジャンプはより便利になります。
後で説明する K2Editor や秀丸エディターではファイルをまたがった検索は grep という名前になっているだけですが、 Emacs では実際に grep プログラムを呼び出します。 そのため、 Windows などでインストールされていない場合は、インストールして PATH を通しておく必要があります。

ファイル内の検索についても簡単に紹介しておきます。
通常のインクリメンタル検索は C-s です。これに C-u を付けた C-u C-s で正規表現によるインクリメンタル検索となります。

また、ファイル内の検索結果をリスト上に表示する occur コマンド(M-x occur)もあります。

Visual Studio

Visual Studio でも正規表現による検索は可能です。
こちらは [編集] → [検索と置換] → [フォルダーを指定して検索] (Ctrl+Shift+F) などで検索ダイアログを出した後、オプションで正規表現を有効にします。
grep_vs_grep.png

検索を実行すると検索結果のリストが表示されます。
このリストでダブルクリックや Enter キーを押すと結果位置にジャンプします。
grep_vs_grep_list.png

[クイック検索](Ctrl+F)でも検索対象を変えることで、 同じ検索対象にすることができます。 ただし、動作に違いがあり、クイック検索では検索結果の位置に逐次移動していきます。

K2Editor

Windows のフリーのエディターとして K2Editor も上げておきます。
私はコーディングには場合は Emacs を使ってますが、ちょっとテキストファイルを見たいといった場合にはこちらを使っています。

[検索] → [GREP] (Ctrl-G) などで検索ダイアログを出した後、正規表現にチェックを入れます。
grep_k2_grep.png

検索を実行すると検索結果のリストが表示されます。 ただし、このリストはマウスのクリックでは結果位置の表示はできません。 [検索] → [タグジャンプ] ([F10]) でジャンプします。
grep_k2_grep_list.png

通常の検索(Ctrl-F)でも、オプションで正規表現を使うことができます。
grep_k2_find.png

秀丸エディター

Windows のエディターとしては、秀丸エディターが有名です。 私はほとんど使ったことがないのですが、 無視もできないなということで、こちらの説明も入れておきました。

[検索] → [grep の実行]のメニューから 検索ダイアログを出した後、正規表現にチェックを入れます。


検索を実行すると検索結果のリストが表示されます。 マウスのダブルクリックで結果位置へジャンプします。
grep_hm_grep_list.png


通常の検索(Ctrl-F)でも、オプションで正規表現を使うことができます。

正規表現の歴史と方言

正規表現は Unix では ed といった初期のエディターから使われていましたが、 grep プログラムで広く使われるようになりました。

その後、スクリプト言語の Perl で採用され、かなり拡張されます。 以降はこの Perl の正規表現がほぼ標準となったといってよく、 多くの言語やアプリで使われる正規表現は Perl の正規表現に合わせてあります。


紹介したエディターでは K2Editor は標準的な正規表現が使われています。

Emacs に関しては標準から外れた正規表現となっています。
また、 Emacs の grep コマンドは grep プログラムを実行します。 このため、 Emacs の他のコマンドや lisp のルールとも少しことなります。

Visual Studio は特に方言が強いです。 ただし、ここでの Visual Studio はエディターとしてのものです。
.NET, Boost の正規表現ライブラリといった VC++ などのコード内で使うものはそちらに従います。

秀丸エディターはバージョンによって変わってきます。
Ver. 8.13 以降はほぼ標準的な正規表現です。 それ以前は Emacs に近いルールとなっています。


このように正規表現にはアプリや言語によって書き方や使える機能に違いがあります。
そのため、この入門ではなるべく共通して使える機能だけに絞っています。 ただし、方言があるけど重要と思うものについてはその都度説明するようにしました。

次は ?

まずは英数字だけで検索を使ってみてください。 使っていくうちに、もっと検索結果を絞り込みたいと思ってくるはずです。
例えばヘッダーのインクルードを見たくて、 include で検索したとき、関数名にもひっかかるといった具合です。

ここで、絞りこみをできるようにするのが正規表現です。
必要を感じると覚えやすくなります。必要性を感じながらーつーつルールを増やしていきましょう。
スポンサーサイト
 

Step by step 正規表現入門 - まとめ

今まで出てきたルールを簡単にまとめておきます。

正規表現ルール

英数字、 _ はそのまま

英数字や _ は文字そのものに相当します。
記号でメタ文字となる場合は、前に \ を付けます。

任意文字と繰り返し

メタ文字 繰り返し
. 任意の文字
* 0 回以上繰り返し
+ 1 回以上繰り返し
? 0 回または 1 回

マッチ例:
a*bc → abc, aabc, bc
a+bc → abc, aabc (bc はマッチしない)
jpe?g → jpg, jpeg

文字クラス []

[] は内部のどれかにマッチする文字となります。
また、 - で範囲指定、 ^ で否定となります。

マッチ例:
[SG]et → Set, Get
[a-d]  → a, b, c, d
[a-z]  → 小文字のアルファベット a ~ z
[^acd-f] → b, g など

グルーピング

言語やエディターの置換でマッチ文字列の取得する場合には ( ) を使ってグルーピングします。
パターンの複数指定をする場合にはさらに | と組み合わせます。

マッチ例:
(Error|Warning)     → Error Warning
\.(png|gif|jpe?g)$  → .png .gif .jpeg .jpg

文字種別

文字クラスでかけるのですが、 これを簡単に書くために文字種別を指定するメタ文字があります。
メタ文字 意味 対応する文字クラス
\w 単語。英数字と _(アンダーバー) [a-zA-Z0-9_]
\d 数字 [0-9]
\s 空白文字(スペース、タブ、改行) [ \t\r\n]
\W, \D, \S のように文字を大文字にするとそれぞれの文字種以外文字となります。

位置指定

foo を検索したい場合、 そのままでは barfoo や foobar のような文字にもマッチしてしまいます。 こういった場合に位置指定のメタ文字を使います。
メタ文字 意味
^ 行頭
$ 行末
\b 単語境界
< 単語の先頭
> 単語の末尾

言語、アプリ別一覧

正規表現は Perl 互換のものがよく使われます。 前節の説明はそちらでしています。
言語やアプリによって変わってくるのもあるので、対象別にまとめました
機能 Perl (K2Editor) grep Emacs Visual Studio 秀丸エディター
任意文字 . . . . .
0 回以上繰り返し * * * * *
1 回以上繰り返し + + + + +
0 回または 1 回 ? ? ?   ?
文字クラス [ ] [ ] [ ] [ ] [ ]
グルーピング ( ) | \( \) \| \( \) \| ( ) | ( ) |
グルーピング(マッチ文字取得) ( )   \( \) { } ( )
単語 \w   \w ※1 :a ※1 \w
数字 \d     :d \d
空白 \s   \sスペース :b \s
行頭 ^ ^ ^ ^ ^
行末 $ $ $ $ $
単語境界 \b       \y
単語先頭、末尾   \< \> \< \> < > < >
※1 : _(アンダーバー)は含みません。

次は ?

以上で正規表現の入門は完了です。
ここで紹介したルールで結構使っていけると思います。

ただし、正規表現のすべてのルールについて説明したわけではありません。
このほかにも使用頻度は低いですが、 繰り返し回数の指定やものぐさマッチのメタ文字など知っておくと便利なものはあります。

今後は必要になった時にさらに言語やアプリのドキュメントを見て、ルールを増やしていってください。

以下に、使い方を紹介したエディターの正規表現の詳細ページを上げておきます。
 
このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
50位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
6位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

03月 | 2017年04月 | 05月
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。