Open5
詳解 正規表現 第3版メモ
1.3.1
正規表現を知っていることと本質を理解することには違いがある
1.4.1
「^cat」はc,a,tが行頭にあるときのみマッチする
「^」はアンカーとしてマッチを実質的に行頭に固定するために使われる。
「cat$」はscatのように、行の末尾のc,a,tにマッチする
考え方
正規表現は 文字通りに解釈する習慣 を身につけた方がよい。
「^cat」は、行頭がcatになっている行にマッチする
ではなく、
「^cat」は、行頭がある場合、その次がc、その次がa、その次がtになっている行にマッチする
文字通り読むことで、新しい正規表現に行き当たった時でも、本質的な意味を理解できる。
文字クラス
[…]特定の位置に現れても良い文字のリストを指定できる
[0123456789abcdefABCDEF]は[0-9a-fA-F]と書くことができる
否定文字クラス
[^...]リストに含まれていない任意の文字にマッチするようになる
[^1-6]1から6までの数字以外の文字にマッチする
メタ文字のまとめ
メタ文字 | 名前 | マッチするもの |
---|---|---|
. | ドット | 任意の1文字 |
[...] | 文字クラス | リストの中の任意の1文字 |
[^...] | 否定文字クラス | リストに含まれていない任意の1文字 |
^ | キャレット | 行の先頭の位置 |
$ | ドル記号 | 行の末尾の位置 |
< | バックスラッシュと小なり記号 | 語の先頭の位置 |
> | バックスラッシュと大なり記号 | 語の末尾の位置 |
| | または(縦棒) | 区切っている正規表現のどれか |
(...) | 括弧 | 「|」の範囲を限定するために使われる |
- 文字クラスの中と外では、どの文字がメタ文字かについての規則が全く異なる。
- 選択と文字クラスを混同してはならない。文字クラスの「[abc]」と選択の「(a|b|c)」は、実質的に同じものを意味しているが、この例の共通性を一般化することはできない。
- 否定文字クラスは、リストに含まれていないすべての文字にマッチする通常の文字クラスを指定するための近道にすぎない。だから、「[^x]」は"xがなければマッチする"という意味ではなく"xではない何かにマッチする"という意味になる。両者の違いは微妙だが、重要。