正規表現とは?基本から分かりやすく解説

正規表現とは

正規表現とは、文字列の中から「条件に合う文字」を探すためのルールです。

例えば、次のような判定に使います。

^[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回
() 取り出す
| または
\ 特殊記号を普通の文字にする

正規表現は、いきなり記号で考えるよりも、

何で始まるか
何が続くか
何で終わるか
どの部分を取り出したいか

の順番で考えると理解しやすくなります。