1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

正しい表現ってなんやねん!改めて正規表現についてまとめてみた。

1
Posted at

【初心者向け】何度忘れても大丈夫!正規表現の基本をマスターしよう

はじめに

「正規表現?ああ、あの暗号みたいなやつね...🤔」

そう思ったあなた、安心してください。私も毎回忘れます

でも大丈夫。この記事を読めば、正規表現の基本がスッキリ理解できます!
どのプロジェクトでも、どの言語でも使える超実用的なスキルなので、一緒にマスターしましょう💪

正規表現って何?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
  • 困ったらリファレンスで確認しよう

完璧に覚える必要はありません!
実際の開発では、必要なときにググって、試して、使うの繰り返しです。
この記事をブックマークして、困ったときに見返してくださいね📚

参考リンク


何か質問があれば、コメント欄でお気軽にどうぞ!👋

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?