0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

正規表現テスターの使い方ガイド — 初心者でもわかるオンライン正規表現チェッカー活用法

0
Posted at

TL;DR

  • 正規表現テスターを使えば、書いたパターンの動作をリアルタイムで確認できる
  • よく使うパターン(メール、電話番号、郵便番号等)はテンプレートとして覚えておくと効率的
  • AI正規表現生成ツールを使えば自然言語から正規表現を自動生成できる

正規表現テスターとは

正規表現テスター(Regex Tester)は、正規表現パターンとテスト文字列を入力すると、マッチ結果をリアルタイムでハイライト表示してくれるツールです。

正規表現をコードに組み込む前に動作を確認できるため、以下のメリットがあります。

  • 試行錯誤が速い: パターンを変更するたびにコードを実行し直す必要がない
  • マッチ結果が視覚的: どの部分がマッチしているかが一目でわかる
  • キャプチャグループの確認: グループ化した部分の抽出結果が個別に表示される
  • フラグの切り替え: g(グローバル)、i(大文字小文字無視)、m(複数行)の効果を即座に確認

基本的な使い方

オンラインの正規表現テスター(regex101やDevToolBox正規表現テスターなど)を開いて、以下の手順で試してみましょう。

Step 1: パターンを入力する

正規表現テスターの「パターン」欄に正規表現を入力します。

パターン: \d{3}-\d{4}-\d{4}

Step 2: テスト文字列を入力する

「テスト文字列」欄に、マッチさせたいテキストを貼り付けます。

テスト文字列:
田中太郎の電話番号は090-1234-5678です。
連絡先: 03-1234-5678
FAX: 06-9876-5432

Step 3: マッチ結果を確認する

マッチした部分がハイライトされます。

マッチ結果:
✅ 090-1234-5678
✅ 03-1234-5678  ← 市外局番もマッチ(意図通りか確認)
✅ 06-9876-5432

この例では市外局番付きの電話番号もマッチしています。携帯電話のみに限定したい場合はパターンを 0[789]0-\d{4}-\d{4} に修正します。

実践パターン集: 日本語開発でよく使う正規表現10選

1. メールアドレス

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
const email = "user@example.com";
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(email);
// => true

注意: RFC 5322完全準拠のメールアドレス正規表現は非常に複雑です。実務ではバリデーションライブラリ(validator.js等)の使用を推奨します。上記は簡易版です。

2. 日本の電話番号(固定・携帯)

0\d{1,4}-\d{1,4}-\d{4}
// マッチ例
"090-1234-5678"  // 携帯
"03-1234-5678"   // 東京
"0120-123-456"   // フリーダイヤル(4桁にならないので非マッチ)

携帯電話のみ:

0[789]0-\d{4}-\d{4}

3. 郵便番号

\d{3}-\d{4}
"〒100-0001".match(/\d{3}-\d{4}/);
// => ["100-0001"]

4. 日付(YYYY-MM-DD)

\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])
"2026-03-24".match(/\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])/);
// => ["2026-03-24", "03", "24"]  ← キャプチャグループで月・日を個別に取得

5. URLの抽出

https?:\/\/[^\s<>"{}|\\^`\[\]]+
const text = "詳細は https://example.com/path?q=test をご覧ください";
text.match(/https?:\/\/[^\s<>"{}|\\^`\[\]]+/g);
// => ["https://example.com/path?q=test"]

6. HTMLタグの除去

<[^>]+>
"<p>Hello <strong>World</strong></p>".replace(/<[^>]+>/g, '');
// => "Hello World"

注意: 複雑なHTML解析には正規表現ではなくDOMパーサー(DOMParser、cheerio等)を使ってください。

7. 全角数字の検出

[0-9]+
"料金は1,000円です".match(/[0-9]+/g);
// => ["1", "000"]

全角数字を半角に変換する場合は、前回の記事「全角半角変換と文字コード変換」も参考にしてください。

8. IPアドレス(IPv4)

\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b
"サーバーIP: 192.168.1.100".match(/\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b/);
// => ["192.168.1.100"]

9. パスワード強度チェック(8文字以上、大小英字+数字+記号)

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$/.test("Passw0rd!");
// => true

(?=...) は**先読み(lookahead)**で、実際にはマッチ位置を進めずに条件だけをチェックします。

10. CSVの各フィールドを分割(引用符対応)

実務ではCSVパーサーライブラリ(papaparse等)の使用を推奨しますが、簡易的な分割には以下が使えます。

const csv = 'name,"Tokyo, Japan",30';
// split + 正規表現よりも、matchAllでフィールドを抽出する方が安全
const fields = [...csv.matchAll(/(?:^|,)\s*("(?:[^"]|"")*"|[^,]*)/g)]
  .map(m => m[1].replace(/^"|"$/g, '').replace(/""/g, '"'));
console.log(fields);
// => ["name", "Tokyo, Japan", "30"]

引用符内のカンマを区切り文字と誤認しないパターンです。matchAll()を使うとキャプチャグループを個別に取得でき、後処理が簡潔になります。

よくある正規表現の間違いとデバッグ

間違い1: 貪欲マッチ vs 最短マッチ

// 貪欲マッチ(デフォルト): できるだけ長くマッチする
"<div>Hello</div><div>World</div>".match(/<div>.*<\/div>/);
// => ["<div>Hello</div><div>World</div>"]  ← 全体にマッチ

// 最短マッチ(?を追加): できるだけ短くマッチする
"<div>Hello</div><div>World</div>".match(/<div>.*?<\/div>/);
// => ["<div>Hello</div>"]  ← 最初のdivだけ

*?、+?、?? で最短マッチになります。テスターで両方試して意図通りか確認しましょう。

間違い2: エスケープ忘れ

// NG: .はメタ文字(任意の1文字にマッチ)
"192.168.1.100".match(/192.168.1.100/);
// => ["192.168.1.100"]  ← マッチするが "192x168y1z100" にもマッチする

// OK: \.でリテラルのドットに限定
"192.168.1.100".match(/192\.168\.1\.100/);
// => ["192.168.1.100"]  ← ドットだけにマッチ

エスケープが必要なメタ文字: . * + ? ^ $ { } [ ] ( ) | \

間違い3: ^と$の複数行での挙動

const text = "line1\nline2\nline3";

// mフラグなし: 文字列全体の先頭/末尾にマッチ
text.match(/^line\d$/);
// => null

// mフラグあり: 各行の先頭/末尾にマッチ
text.match(/^line\d$/gm);
// => ["line1", "line2", "line3"]

間違い4: ReDoS(正規表現によるサービス拒否)

ネストした量指定子は壊滅的バックトラッキングを引き起こし、処理が数秒〜数分フリーズすることがあります。

// NG: (a+)+ のようなネスト量指定子は危険
const evil = /^(a+)+$/;
evil.test("aaaaaaaaaaaaaaaaaaaaaaaaaab");
// => 数秒〜数十秒フリーズする可能性あり

// OK: ネストを排除
const safe = /^a+$/;
safe.test("aaaaaaaaaaaaaaaaaaaaaaaaaab");
// => 即座にfalse

ユーザー入力を正規表現で検証する場合は特に注意が必要です。テスターで長い文字列での動作を確認しましょう。

AI正規表現生成ツールの活用

複雑な正規表現を一から書くのは時間がかかります。自然言語で条件を記述すると正規表現を自動生成してくれるツールが便利です。

例えば「日本の携帯電話番号にマッチする正規表現」と入力すると:

入力: 日本の携帯電話番号(090/080/070で始まるハイフン区切り)
出力: 0[789]0-\d{4}-\d{4}

DevToolBox AI正規表現生成では、自然言語で条件を書くとパターンを自動生成し、テスト文字列でマッチ確認もできます。「メールアドレスかつ.co.jpドメインのみ」のような複合条件も自然言語で指定できるため、正規表現に不慣れな場合に特に有用です。

手動でパターンを調整したい場合はDevToolBox正規表現テスターで編集・テストできます。

JavaScript / Pythonでの正規表現の書き方

JavaScript

// リテラル表記
const pattern = /\d{3}-\d{4}/g;

// RegExpコンストラクタ(動的パターン)
const keyword = "Tokyo";
const dynamic = new RegExp(keyword, "gi");

// よく使うメソッド
"090-1234-5678".match(/\d{3}-\d{4}-\d{4}/);  // マッチ結果を返す
/\d+/.test("abc123");                           // true/false
"a1b2c3".replace(/\d/g, "X");                   // "aXbXcX"
"a,b,,c".split(/,+/);                           // ["a", "b", "c"]

// matchAll(ES2020+): 全マッチをイテレータで取得(キャプチャグループ付き)
const text = "2026-03-24, 2026-04-01";
for (const m of text.matchAll(/(\d{4})-(\d{2})-(\d{2})/g)) {
  console.log(`${m[0]}: 年=${m[1]}, 月=${m[2]}, 日=${m[3]}`);
}
// => "2026-03-24: 年=2026, 月=03, 日=24"
// => "2026-04-01: 年=2026, 月=04, 日=01"

// Unicode property escape(ES2018+): 日本語文字の検出
"Hello世界123".match(/\p{Script=Han}+/gu);
// => ["世界"]  ← CJK漢字のみにマッチ

\p{Script=Han} はUnicodeプロパティエスケープで、uフラグ必須です。日本語開発では\p{Script=Hiragana}(ひらがな)、\p{Script=Katakana}(カタカナ)も使えます。

Python

import re

# 基本的な使い方
pattern = r'\d{3}-\d{4}'
result = re.search(pattern, '〒100-0001 東京都')
print(result.group())  # "100-0001"

# 全マッチ
re.findall(r'\d+', 'a1b2c3')  # ['1', '2', '3']

# 名前付きキャプチャグループ
m = re.match(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})', '2026-03-24')
print(m.group('year'))   # "2026"
print(m.group('month'))  # "03"

参考リンク

まとめ

正規表現テスターを活用すれば、パターンの動作確認と修正が格段に速くなります。本記事で紹介した10個の実践パターンをテンプレートとして手元に置いておくと、日常の開発で即座に使えます。複雑なパターンはAI正規表現生成ツールで下書きを作り、テスターで微調整するワークフローが効率的です。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?