【初心者向け】何度忘れても大丈夫!正規表現の基本をマスターしよう
はじめに
「正規表現?ああ、あの暗号みたいなやつね...🤔」
そう思ったあなた、安心してください。私も毎回忘れます。
でも大丈夫。この記事を読めば、正規表現の基本がスッキリ理解できます!
どのプロジェクトでも、どの言語でも使える超実用的なスキルなので、一緒にマスターしましょう💪
正規表現って何?3秒で理解しよう
正規表現 = 文字列を探すための「検索パターン」
もう少し詳しく言うと...
正規表張(Regular Expression)は、文字列の検索や置換、パターンマッチングを行うための強力なツールです。特定の文字列パターンを定義し、それに一致するテキストを効率的に見つけたり、置き換えたりすることができます。
引用元: 正規表現の基本
具体例で理解しよう
たとえば、こんな場面で活躍します:
- 📧 「このメールアドレス、ちゃんと
@入ってる?」 - 📞 「電話番号が10桁になってるかチェックしたい」
- 🔄 「コード内の
hogeを全部fugaに置き換えたい」
つまり、**「こういうパターンの文字列を見つけて、何かしたい!」**というときの最強ツールです。
正規表現の基本パターン【これだけ覚えればOK】
全部覚える必要はありません。よく使うものだけピックアップしました!
便利なリファレンス
まずは全体像を把握したい方はこちら:
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_expressions
実際に試しながら学びたい方はこちらがオススメ!
https://www-creators.com/tool/regex-checker
このサイトなら、リアルタイムで動作確認しながら学習できるので超便利です✨
最頻出パターン早見表
| パターン | 意味 | 例 |
|---|---|---|
^ |
文字列の先頭 |
^abc → "abc"で始まる |
$ |
文字列の末尾 |
xyz$ → "xyz"で終わる |
. |
任意の1文字 |
a.c → "abc", "adc"など |
* |
0回以上の繰り返し |
ab*c → "ac", "abc", "abbc"など |
+ |
1回以上の繰り返し |
ab+c → "abc", "abbc"など |
[abc] |
a, b, cのいずれか |
[0-9] → 任意の数字1文字 |
実践!正規表現を使ってみよう
【例1】メールアドレスのバリデーション
String regex = "^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\\.)+[a-zA-Z]{2,}$";
// ✅ 正しいメールアドレス
"hoge@example.com".matches(regex);
// --> true
"yamada.tarou@example.com".matches(regex);
// --> true
// ❌ 不正なメールアドレス
"suzuki.example.com".matches(regex);
// --> false (@がない)
"kudou#jirou@example.com".matches(regex);
// --> false (ローカル部分で使用できない文字種)
パターンの解説
| 部分 | 意味 |
|---|---|
^[a-zA-Z0-9_.+-]+ |
先頭は英数字とピリオド、アンダースコアなど(1文字以上) |
@ |
@マーク(必須) |
([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\\.)+ |
ドメイン部分(example.のような形式) |
[a-zA-Z]{2,}$ |
末尾は英字2文字以上(com, jpなど) |
【例2】文字列の一括置換
String str1 = "abc123abc123";
String str2 = str1.replace("abc", "0");
System.out.println(str2);
// --> 01230123
// 正規表現を使った置換も可能
String str3 = str1.replaceAll("[a-z]+", "X");
System.out.println(str3);
// --> X123X123(英小文字をまとめて置換)
【例3】郵便番号のチェック
String regex = "^\\d{3}-\\d{4}$";
"123-4567".matches(regex);
// --> true
"1234567".matches(regex);
// --> false(ハイフンがない)
"12-3456".matches(regex);
// --> false(桁数が違う)
正規表現を使うメリット
1. データの品質を保証できる 🛡️
不正なデータが入力された瞬間にブロック!システムの安定性が向上します。
2. コードがシンプルになる ✨
if文の嵐から解放されます。1行で複雑な条件チェックが可能に。
3. どの言語でも使える 🌍
Java、JavaScript、Python、PHP...ほぼ全ての言語で同じ知識が活かせます。
よくあるハマりポイント(実体験)
❌ バックスラッシュの扱い
// NG例(エスケープ忘れ)
String regex = "\d+"; // コンパイルエラー!
// OK例
String regex = "\\d+"; // Javaでは\\が必要
❌ 完全一致のつもりが部分一致に
String regex = "abc";
"xyzabcdef".matches(regex);
// --> false(matchesは完全一致)
"xyzabcdef".contains("abc");
// --> true(部分一致ならcontains)
// 正規表現で部分一致させたい場合
Pattern.compile(regex).matcher("xyzabcdef").find();
// --> true
まとめ
- 正規表現は文字列パターンを定義して検索・置換するツール
- メールアドレス、電話番号、郵便番号などのバリデーションで大活躍
- 覚えるのは大変だけど、使いながら覚えればOK
- 困ったらリファレンスで確認しよう
完璧に覚える必要はありません!
実際の開発では、必要なときにググって、試して、使うの繰り返しです。
この記事をブックマークして、困ったときに見返してくださいね📚
参考リンク
何か質問があれば、コメント欄でお気軽にどうぞ!👋