正規表現
ナビゲーションに移動
検索に移動
正規表現(regular expression)とは、文字列のマッチパターンを表現する方法です。 正規表現を使うと、テキスト・データ・レコード内の特定のパターンにマッチする文字列を探し出して修正することができ、テキスト・データを操作するユーティリティ・プログラムやプログラミング言語でよく使われます。 正規表現は非常に強力です。
文法[編集]
ここでは特定のプログラミング言語やソフトウェアによらない基本的な正規表現の文法を解説し、個々の文法や具体的なパターンマッチの方法についてはそれぞれの言語やソフトウェアのページに譲ります。
POSIX基本正規表現のメタ文字の一覧[編集]
メタ文字 | 解説 |
---|---|
. | 任意の1文字にマッチする。たとえば .ook という正規表現は "book" や "cook" などにマッチする。文脈によっては改行文字にマッチする場合もある。
|
* | 直前の正規表現の0回以上の繰り返し。たとえば .* という正規表現は任意の1文字の0文字以上の繰り返しなので、すべての文字列にマッチする。
|
^ | 行頭にマッチする。例えば ^Wikipedia はWikipedia とWikipedia日本語版 にマッチするが、日本語版Wikipedia にはマッチしない。
|
$ | 行末にマッチする。例えば Wikipedia$ はWikipedia と日本語版Wikipedia にマッチするが、Wikipedia日本語版 にはマッチしない。
|
[string] | 文字列stringに含まれる任意の1文字にマッチする。たとえば [bcl]ook は "hook" と "sook" にはマッチしないが、"book" と "cook" と "look" にマッチする。
|
[^string] | 文字列stringに含まれない任意の1文字にマッチする。たとえば [^bcl]ook は "hook" と "sook" にはマッチするが、"book" と "cook" と "look" にマッチしない。
|
[S-E] | 文字Sから文字Eの間の任意の1文字にマッチする。たとえば、[A-C] は "A" "B" "C" にマッチする。
|
[^S-E] | 文字Sから文字Eの間にない任意の1文字にマッチする。たとえば、[^A-C] は "A" "B" "C" 以外にマッチする。
|
POSIX拡張正規表現での追加メタ文字の一覧[編集]
メタ文字 | 解説 |
---|---|
\ | メタ文字の意味を打ち消し、メタ文字自身を表す。 |
? | 直前の正規表現の0回または1回の繰り返し。直前の文字があってもなくてもマッチすることを意味する。たとえば s?he は "she" と "he" にマッチする。
|
+ | 直前の文字の1文字以上の繰り返し。たとえば Goo+gle という正規表現は "Google" や "Gooogle"、"Goooooooogle" などにマッチするが、"Gogle" にはマッチしない。
|
regexp1|regexp2 | regexp1またはregexp2にマッチする。 |
(regexp) | 正規表現をグループ化する。括弧の中の文字列を1つのかたまりとして扱う。たとえば Wiki(books)? は "Wiki" または "Wikibooks" にマッチする。
|
regexp{m,n} | regexpのm回以上n回以下の繰り返し。たとえば、we{2,4}k は "week" "weeek" "weeeek" にマッチする。
|
サポートしているソフトウェア[編集]
正規表現は、コマンドラインツール、プレーンテキストエディタ、プログラミング言語など、さまざまなソフトウェアツールでサポートされています。 これらのツールのほとんどは、Unix、Linux、Windows、Mac OS Xなどの様々なコンピューティングプラットフォームで利用できます。 これらのツールは、それぞれ微妙に異なる構文を採用しています。いくつかの注目すべきものを見てみましょう。
正規表現を使用するツールは以下の通りです。
- コマンドラインツール
- grep
- egrep
- sed
- awk
- プレーンテキストエディタ
- ed
- vi(ex)
- emacs
- プログラミング言語
- Java
- JavaScript
- Perl
- PHP
- Python
- Ruby
- Tcl
正規表現は、より大きなテキストセットからサブセットを見つけたり、分離したりする小さなコンピュータプログラムと考えることができます。 通常のコンピュータプログラムがそれを実行するためにコンピュータを必要とするのと同じように、正規表現はそれを解釈し、意味を与えるためのソフトウェア・アプリケーションを必要とします。
しばしば混同されるのですが、シェルなどのワイルドカードとして知られる glob とは異なります。