備忘録:正規表現

これは、たまに正規表現を使うけどすぐ忘れてしまう人のメモです。
正規表現の基本については下記の記事を参照。

忘れがちなメタ文字6つ

他言語からの類推が働かず、どれがどれか忘れがちなメタ文字は以下の6つ。
無理やり語呂合わせでおぼえることにする。

メタ文字 機能 語呂合わせ
. 任意の1文字 全てに終止符
^ 行の先頭 頭にハット
$ 行の末尾 最後はカネ
* 繰り返し(0文字以上) ゼロからの米作り
+ 繰り返し(1文字以上) プラスは0を含まない
? 繰り返し(0文字か1文字) 有りや無しや?

3種類のカッコ

これはまあそんなに混乱しない。

カッコ 機能
[ ] 集合のどれか1文字
( ) 2文字以上をグループ化
{ } 直前の文字の繰り返し回数

メタ文字の基本

任意の1文字 .

ワイルドカードでは ? だが、正規表現では . であることに注意。

行の先頭 ^ と行の末尾 $

この2つはセットでおぼえる。
正規表現の 先頭 / 末尾 以外では通常の文字扱いとなることに注意。

直前の文字の繰り返し * + ?

この3つはセットでおぼえる。
* と ? はワイルドカードとは意味が異なることに注意。

エスケープ \

これは他言語でもおなじみ。

集合のどれか1文字 [ ] と 補集合のどれか1文字 [^ ]

^ は正規表現の先頭の場合(行の先頭)とは意味が異なるので注意。
こちらのほうが、C言語等のビットNOT演算子から類推できる。

2文字以上をグループ化 ( )

これは分かりやすい。

いずれかの文字列 |

これも分かりやすい。

直前の文字の繰り返し回数 { }

{n} は n文字、{n,} は n文字以上、{n,m} は n文字以上m文字以下。

エスケープシーケンス

メタ文字のエスケープと、おなじみの \n (改行) や \t (タブ) など以外に下記のようなものが使える。

  • \s : 空白文字 (半角スペース、タブ、改行)など ⇔ \S : それ以外の文字
  • \d ⇔ \D : 数字とそれ以外、\l ⇔ \L : 小文字とそれ以外、\u ⇔ \U : 大文字とそれ以外
  • \w ⇔ \W : 英数字+アンダースコア とそれ以外
  • \Q~\E : 囲まれた範囲はメタ文字を解釈しない

置換

( )でくくった部分を前から順に $1 $2 $3 ... で置換できる。
ただし、これには方言差があり、秀丸では \1 \2 \3 ... である。
秀丸は日本だからドルじゃなくて円とおぼえておく。(ただしサクラエディタは$ )