正規表現とは
正規表現とは、文字列の中から「条件に合う文字」を探すためのルールです。
例えば、次のような判定に使います。
^[0-9]+$
これは、
数字だけで構成されている文字列
に一致します。
基本の考え方
正規表現は、次の順番で読むと理解しやすいです。
^[0-9]+$
分解すると、こうなります。
^ 文字列の先頭
[0-9] 0から9までの数字
+ 1文字以上続く
$ 文字列の終わり
つまり、
最初から最後まで数字だけ
という意味です。
よく使う記号
| 記号 | 意味 |
|---|---|
^ | 文字列の先頭 |
$ | 文字列の終わり |
[0-9] | 数字1文字 |
[a-z] | 小文字の英字1文字 |
[A-Z] | 大文字の英字1文字 |
+ | 直前の条件が1回以上 |
* | 直前の条件が0回以上 |
? | 直前の条件が0回または1回 |
{6} | 直前の条件がちょうど6回 |
. | 何か1文字 |
() | 一致した部分を取り出す |
| ` | ` |
\ | 特殊記号を普通の文字として扱う |
数字だけを判定する
^[0-9]+$
一致します。
123
2026
99999
一致しません。
abc
abc123
123abc
ポイントは、^ と $ です。
これがないと、文字列の一部に数字が含まれているだけでも一致してしまいます。
数字6桁を判定する
^[0-9]{6}$
意味は、
数字がちょうど6桁
です。
一致します。
123456
260424
一致しません。
12345
1234567
abc123
英字だけを判定する
^[a-zA-Z]+$
意味は、
英字だけ
です。
一致します。
abc
ABC
Abc
一致しません。
abc123
123
abc-def
英数字だけを判定する
^[a-zA-Z0-9]+$
意味は、
英字または数字だけ
です。
一致します。
abc123
ABC999
test2026
一致しません。
abc-123
abc_123
abc 123
特定の文字を含むか調べる
test
これは、文字列の中に test が含まれていれば一致します。
より厳密に「testで始まる」としたい場合は、次のようにします。
^test
「testで終わる」としたい場合は、次のようにします。
test$
どれか1文字に一致させる
[abc]
これは、
a または b または c のどれか1文字
という意味です。
数字なら次です。
[0-9]
英小文字なら次です。
[a-z]
英大文字なら次です。
[A-Z]
否定する
[^0-9]
これは、
数字以外の1文字
という意味です。
^ は、[] の中で使うと「以外」という意味になります。
ただし、[] の外で使うと「先頭」という意味です。
^[0-9]
これは「数字で始まる」です。
[^0-9]
これは「数字以外」です。
グループ化する
([0-9]+)
これは、数字の連続をひとまとまりとして扱います。
置換などで、あとからその部分を使いたいときに重要です。
例えば、次のような考え方です。
^([0-9]+)-([a-z]+)$
これは、
数字のかたまり
ハイフン
英小文字のかたまり
という構造を表します。
この場合、
123-abc
に一致します。
グループは次のようになります。
$1 = 123
$2 = abc
置換で使う $1 $2
正規表現では、() で囲んだ部分を、置換後に $1 $2 のように使えます。
検索する正規表現
^([0-9]+)-([a-z]+)$
置換後
$2-$1
変換結果
123-abc
↓
abc-123
ここで、
$1 = 123
$2 = abc
です。
ドットを文字として扱う
. は正規表現では「何か1文字」という意味です。
そのため、普通のドットとして扱いたい場合は、次のように書きます。
\.
例えば、末尾が .com の文字列を調べたい場合は、次のようにします。
\.com$
またはを使う
cat|dog
これは、
cat または dog
という意味です。
グループ化すると、よりわかりやすくなります。
^(cat|dog)$
これは、
cat または dog のどちらかだけ
に一致します。
最初に覚えるべき正規表現
数字だけ
^[0-9]+$
数字6桁
^[0-9]{6}$
英字だけ
^[a-zA-Z]+$
英数字だけ
^[a-zA-Z0-9]+$
空白を含まない文字
^\S+$
何か1文字以上
^.+$
まとめ
正規表現は、文字列を探すためのルールです。
最初は、次の意味だけ押さえれば十分です。
^ 先頭
$ 終わり
[0-9] 数字
[a-z] 小文字
[A-Z] 大文字
+ 1回以上
* 0回以上
? 0回または1回
{6} ちょうど6回
() 取り出す
| または
\ 特殊記号を普通の文字にする
正規表現は、いきなり記号で考えるよりも、
何で始まるか
何が続くか
何で終わるか
どの部分を取り出したいか
の順番で考えると理解しやすくなります。
