Help us understand the problem. What is going on with this article?

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

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で正規表現を使ってどんなことができるのかが書いてあるので、お勧めです。

tossh
よくいるいるめがね族。
http://bochibochibocchi0095.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした