レッスン 2
リテラルとメタ文字
文字クラス、量指定子、アンカー、エスケープ。
regex 構文の多くは 2 つに分かれます。リテラル(自分自身にマッチ)と メタ文字(意味を持つ特殊記号)。
リテラルとエスケープ
文字と数字は通常自分自身にマッチします: cat は部分文字列 cat にマッチ。
. * + ? [ ] ( ) { } | ^ $ \ などのメタ文字には注意が必要です。
.は 任意の 1 文字 にマッチ(一部モードでは行終端を除く)- リテラルのドットにマッチするにはエスケープ:
\.
迷ったら 文字クラス で句読点: [.] はエスケープ議論なしでドットにマッチ。
文字クラス
[abc] は集合 a、b、c のいずれか 1 文字にマッチ。
有用な省略形(JavaScript 風):
| クラス | 意味 |
|---|---|
\d | 数字 [0-9] |
\w | 「単語」文字(エンジン依存;多くの場合 [A-Za-z0-9_]) |
\s | 空白 |
\D, \W, \S | 否定版 |
範囲: 小文字は [a-z]。クラス内でリテラルハイフンが必要なら - を先頭か末尾に。
量指定子
直前の atom を繰り返す:
| 量指定子 | 意味 |
|---|---|
* | 0 回以上 |
+ | 1 回以上 |
? | 0 回または 1 回 |
{3} | ちょうど 3 回 |
{2,5} | 2 から 5 回 |
{2,} | 2 回以上 |
Greedy vs lazy: + は可能な限り多く消費;+? は可能な限り少なく。区切りフィールドの解析で重要。
アンカー
| アンカー | 意味(典型的) |
|---|---|
^ | 入力または行の先頭(multiline フラグ時) |
$ | 入力または行の末尾 |
\b | 単語境界 |
^https:// は URL が文の途中ではなく先頭(または行頭)から始まることを保証します。
グループ化
( ... ) は atom をグループ化し、量指定子をグループに適用: (ab)+ は ab、abab などにマッチ。
要点
小さくテストした部品 からパターンを組み立てる: アンカー + クラス + 量指定子。各セグメントに 1 つの役割があれば複雑なパターンも読みやすくなります。