Edited at

忘れっぽい人のための正規表現チートシート

More than 3 years have passed since last update.

正規表現はテキスト処理に大変便利なわけですが、数字のメタキャラクタなんだったっけ?とかあの量指定子なんだったっけ?とか慣れないうちはよく忘れてしまいます。

そこで自分のための備忘録として、チートシートにまとめてみました。


1.基本のメタキャラクタ

メタキャラクタにより任意の1文字や任意の半角数字などを指定することができます。

メタキャラクタ
意味

.
任意の1文字

\w
英単語を構成する文字(a~z,A~Z,_,1~9)

\W
英単語を構成する文字以外

\s
空白文字(半角スペース,タブ,改行,キャリッジリターン)

\S
空白文字以外

\d
半角数字(0~9)

\D
半角数字以外

\b
単語の境界に一致

[xyz]
指定された文字のどれかに一致(この場合xyzのいずれかに一致)

[a-z]
マッチする文字の範囲を指定する表現(この場合aからzまで他には[1-9][A-Z]など文字コードが連続していれば使える。)

(pattern1|pattern2)
指定されたパターンのどれかにマッチする表現


2.量指定子

量指定子は、文字の後ろに配置し、前の文字が何回出てくるのかを指定します。例えば、0回以上の繰り返しにマッチする量指定子*

ne*ko

のように使うと、nko, neko, neeko,neeekoなどに一致します。カッコで囲むことにより繰り返す文字列も指定することができます。

(neko)*sakana

であると、sakana, nekosakana, nekonekosakanaという文字列に一致します。

量指定子
意味

*
0回以上の繰り返しにマッチ

+
1回以上の繰り返しにマッチ

{n}
n回の繰り返しにマッチする表現

{n,}
n回以上の繰り返しにマッチする表現

{n,m}
n回以上m回以下の繰り返しにマッチする表現

?
0回または1回の出現にマッチする表現


3.アンカー

文字列の先頭や末尾に特定の文字がある文字列も表現できます。

アンカー
意味

^pattern
文字列の先頭にpatternがある文字列に一致

pattern$
文字列の末尾にpatternがある文字列に一致


4.キャプション

マッチしたい文字列の一部を再利用する場合にはキャプションという機能を使うことで達成出来ます。

たとえば#や$で囲まれた文字をマッチしたいときには

([#$]).+\1

とすることで、#neko#$neko$に一致します。つまりキャプチャは()で囲ったところに出現した文字をキャプチャし\1という変数に入れてマッチを行うという機能になります。

キャプチャは複数使うことができます。例えば

(a)(b)c(\2)(\1)

であればabcbaという文字列に一致します。キャプチャは()で囲った順番で変数\1,\2,\3,...と代入されます。

キャプチャされるのを抑制する場合には(?:pattern)とします。


5.まとめと参考文献

正規表現は覚えると非常に応用範囲の広い技術(ログ解析、入出力チェック)なので、体が覚えるレベルまでに達することが今後の目標ですw

以下、おすすめの本へのリンクを貼っておきます。

反復学習ソフト付き 正規表現書き方ドリル

http://gihyo.jp/magazine/wdpress/plus/978-4-7741-4509-9

ドリル形式なので手で覚えることができてお勧めです。

詳説 正規表現 第3版

http://www.oreilly.co.jp/books/9784873113593/

読んだことないんですけど、正規表現の有名な本です。鈍器や枕としてもお勧めですw

初めてのPerl 第6版

http://www.oreilly.co.jp/books/9784873115672/

正規表現の本じゃねーじゃんというツッコミはあるとは思いますが、正規表現に関する章があります。perlで正規表現を使ってどんなことができるのかが書いてあるので、お勧めです。