正規表現(Regular Expression)とは、文字列の中から特定のパターンを見つけ出すための「ルール」のようなものです。
たとえば「福井県」を表現するにも、
- 福井県
- ふくいけん
- フクイケン
- FUKUIKEN
と、いろんな表記があります。
これらをひとまとめにして扱いたいとき、以下のような正規表現が使えます:
私は(福井県|ふくいけん|フクイケン|FUKUIKEN)出身です。
このように、いろんな表現に共通するパターンをひとつにまとめられるのが正規表現です。
目次
正規表現で使う基本記号(メタ文字)一覧
記号 | 読み方 | 意味 | 例 |
---|---|---|---|
. | ドット | 任意の1文字(なんでも1文字) | a.b → acb , a1b などに一致 |
* | アスタリスク | 直前の文字が0回以上繰り返す | ho* → h , ho , hooo など |
+ | プラス | 直前の文字が1回以上繰り返す | ho+ → ho , hooo など |
? | はてな | 直前の文字が0回または1回 | books? → book , books |
^ | キャレット | 行の先頭に一致 | ^A → Aで始まる文字列 |
$ | ドル | 行の終わりに一致 | Z$ → Zで終わる文字列 |
` | ` | パイプ | OR(いずれか) |
[] | ブラケット | いずれか1文字 | [abc] → a, b, c |
() | パーレン | グループ化/抽出対象 | (abc) で abc をまとめる |
文字をどう扱うか?具体的な解説
.
ドット(なんでも1文字)
.....
これは「なんでも5文字」の意味になります。
「こんにちは」「ありがとう」「abcde」など、どんな5文字にも一致します。
*
アスタリスク(制限なしの繰り返し)
ふ*
- 「ふ」:一致
- 「ふふふ」:一致
- 「」:空文字にも一致(0回も含むため)
他の文字との組み合わせ:
.*
→ なんでもよい文字列(0文字でもOK)
ふく*
→ 「ふ」があり、「く」は0回以上。例:ふ、ふく、ふくくく、ふ000など
+
プラス(1回以上の繰り返し)
ふく+
→ 「ふく」「ふくく」「ふくくく」などに一致。ただの「ふ」だけは一致しない。
?
はてな(0回または1回)
books?
→ 「book」または「books」に一致。「booksss」は一致しない。
^
キャレット(先頭)
^ふ.*
→ 「ふ」で始まる文字列すべてに一致。
$
ドル(末尾)
^ふ.い$
→ 「ふ」で始まり、「い」で終わる3文字の文字列に一致(中間は任意1文字)
|
パイプ(または)
福井県|ふくいけん|フクイケン|FUKUIKEN
→ いずれか1つに一致
[]
大カッコ(どれか1文字)
[A-Z] → 大文字アルファベット
[a-z] → 小文字アルファベット
[0-9] → 数字
[^]
否定(これ以外)
[^A-Z] → A~Z 以外の文字
※ ^
が []
の中にあると「否定」の意味になります。
()
グループ化
(ふく)+
→ 「ふく」「ふくふく」「ふくふくふく」などに一致
私は(福井県|ふくいけん|フクイケン|FUKUIKEN)出身です
→ 「私は福井県出身」「私はFUKUIKEN出身」などに一致
グループ化することで、OR条件をひとまとまりとして扱うことができます。
よくある具体例
メールアドレスの抽出
[\w._%+-]+@[\w.-]+\.[a-zA-Z]{2,}
@
の前後を正しく抽出できます- 例:
test@example.com
→ 一致
郵便番号(例:123-4567)
\d{3}-\d{4}
\d
:数字、{n}
:n回の繰り返し\d{3}-\d{4}
→ 123-4567 に一致
電話番号(例:03-1234-5678)
\d{2,4}-\d{2,4}-\d{4}
- 市外局番が2〜4桁など、日本の電話番号パターンに対応
まとめ
- 正規表現は「文字列に共通するルール」を表現できる超便利ツール
.
,*
,+
,^
,$
,|
,()
などの記号に意味がある- メール、電話番号、都道府県、カタカナや漢字の抽出など幅広く使える
- 最初はチートシートを見ながら、実際に試すのがおすすめ
正規表現は最初こそ取っつきにくいですが、慣れると驚くほど多用途に使える強力なスキルです。
Comment