logo
GeekFormat

正規表現テスター

Regex Tester
//
无匹配
Worker · 500ms 超时中断
分类模板库
点选即可填充 pattern / flags / demo
测试文本37
匹配详情
0

还没有匹配结果

输入正则与文本后,这里会展示每个匹配、捕获组和命名分组。

匹配高亮预览· Hover / 点击右侧条目联动
Ada Lovelace Alan Turing Grace Hopper

统计

匹配数量
0
执行耗时
0ms
捕获组
0
命名分组
0

命名分组汇总

当前没有命名分组。

無料オンライン正規表現テスター(Regex Tester)。JSリアルタイムマッチングテスト、Capture Group/Named Group表示、置換プレビュー、正規表現構文解説をサポート。Web WorkerによるReDoSタイムアウト保護を内蔵し、よく使う正規表現テンプレート集付き。開発者が正規表現を素早くデバッグ・検証するのに最適です。

関連おすすめ

ユースケース

  • フォームバリデーションルール開発時に、メール、電話番号、ID番号、URLなどの正規表現が正しいかオンラインでテスト
  • ログ解析時に、正規表現でERROR/INFOレベルログからタイムスタンプ、エラーメッセージ、IPアドレスを抽出
  • データクレンジング/ETL時に、日付フォーマット変換、機密情報のマスキング(電話番号の中央をアスタリスクで隠す)など正規表現置換の効果をプレビュー
  • Webスクレイピング時に、コンテンツ抽出用正規表現が対象HTMLフラグメントやJSONフィールドに正確にマッチするか検証
  • 正規表現学習時に、「解説」パネルで各メタ文字とQuantifierの意味を理解し、テンプレートを使って素早く習得
  • Code Review時に、疑問のある正規表現を共有リンクで同僚に送り、一緒にデバッグ・最適化

特徴

  • Web Workerサンドボックス実行:正規表現は独立したWorkerスレッドで実行され、500msタイムアウトで自動中断し、ReDoSによるブラウザフリーズを完全に防止
  • リアルタイムマッチ+カラーハイライト:入力すると即座にマッチ結果が表示され、マッチごとに5色でハイライト表示、ホバーで詳細パネルに連動
  • Capture Group+Named Group:各マッチを自動展開してすべてのCapture Group($1/$2)とNamed Group($<name>)を表示し、集計統計も表示
  • 置換プレビュー:置換文字列を入力するとリアルタイムで置換結果をプレビュー、$1/$&/$`/$'/$<name>構文のクイックボタンに対応
  • 正規表現構文解説:正規表現を自動解析し、メタ文字、Quantifier、Group、アンカーなどの構文の意味を要素ごとに解説
  • 12個のよく使うテンプレート:メール/URL/電話番号/中国語/IPv4/UUID/日付/ログ/HTMLタグなど12個の高頻度正規表現テンプレートを内蔵、ワンクリックで入力
  • 6つのFlagsトグル:g/i/m/s/u/y Flagsの視覚的なトグルボタン、構文を覚える必要なし
  • 共有リンク:pattern/flags/textを含むURLをワンクリックで生成、同僚にコピーしてテスト状態をそのまま再現
  • 実行統計:マッチ数、実行時間(ms)、Capture Group合計数、Named Group数をリアルタイム表示
  • 1500件マッチ上限:超長テキストによるページの遅延を防ぐため自動切り捨て、不正な正規表現には親切な構文エラーヒントを表示

使い方

  1. 上部の/ /の間の入力ボックスに正規表現パターンを入力し(スラッシュを自分で追加する必要はありません)、右側にFlags(g、gi、gimなど)を入力するか、下のボタンをクリックしてトグル
  2. 「テストテキスト」エリアにマッチさせたいテキストを貼り付けまたは入力すると、マッチ結果がリアルタイムでカラーハイライト表示
  3. 右側の「マッチ詳細」パネルをクリックすると、各マッチの位置、内容、Capture Group、Named Groupを表示
  4. 「置換エリア」タブに切り替え、置換文字列を入力すると($1/$&/$<name>などの参照に対応)、リアルタイムで置換結果をプレビュー
  5. 「パターン解説」タブに切り替えると、自動生成された正規表現構文の要素ごとの解説を表示
  6. よく使うテンプレートが必要な場合は、左側の「テンプレートライブラリ」をクリックして対応するテンプレートを選択しワンクリックで入力;デバッグ完了後は「共有」をクリックしてリンクを生成

よくある質問

ReDoSとは?正規表現テストにReDoS対策が必要な理由は?

ReDoS(Regular Expression Denial of Service、正規表現によるサービス拒否攻撃)とは、悪意を持って作成された正規表現(例:`(a+)+$`で長い文字列をマッチさせる)が壊滅的なバックトラッキング(catastrophic backtracking)を引き起こし、CPU使用率100%、ブラウザフリーズ、サーバークラッシュを引き起こす現象です。本ツールはWeb Workerサンドボックス内で正規表現マッチングを実行し、500msでタイムアウトして自動中断するため、バックトラッキングを引き起こす悪意のある正規表現を入力してもブラウザがフリーズすることはありません。これが本ツールのコアなセキュリティ機能です。

g、i、m、s、u、yの6つのFlagsはそれぞれどういう意味ですか?

g(global)は最初の1つだけでなくすべてのマッチを検索します;i(ignoreCase)は大文字小文字を無視します;m(multiline)は^と$を各行の先頭/末尾にマッチさせます;s(dotAll)はドット.に改行文字を含むすべての文字をマッチさせます;u(unicode)はUnicodeモードでemojiやマルチバイト文字を正しく処理します;y(sticky)はlastIndex位置から正確にマッチする貪欲でないマッチングを行います。本ツールでは6つのFlagsの視覚的なトグルボタンを提供しており、クリックでリアルタイムにオン/オフできます。

Capture GroupとNamed Groupとは?使い方は?

Capture Groupは括弧`(pattern)`で囲み、マッチ後に$1、$2などで参照して部分文字列を抽出できます。Named Groupは`(?<name>pattern)`構文で定義し、マッチ後に`$<name>`で参照できるためコードの可読性が向上します。例えば`(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})`で日付をマッチさせた後、置換文字列で`$<year>年$<month>月$<day>日`のように再フォーマットできます。本ツールは各マッチのCapture GroupとNamed Groupの結果を自動的に一覧表示します。

どのプログラミング言語の正規表現構文をサポートしていますか?

本ツールはJavaScriptネイティブのRegExpエンジンをベースにしており、JS/TypeScript、Python reモジュール、Java java.util.regex、PHP preg_*、Go regexpなどの主流エンジン(いずれもPCRE/Perl流)と概ね互換性があります。一部の高度な機能(Pythonの`(?P<name>)`Named Group記法、.NETの可変長lookbehindなど)には違いがあります。日常開発で使う99%の正規表現(メール、電話番号、URL、日付の検証/抽出)はどのエンジンでも共通して使えるため、本ツールでテストした後にコードにコピーして使用できます。

テストした正規表現を同僚と共有するには?

上部ツールバーの「共有」ボタンをクリックすると、現在の正規表現パターン、Flags、テストテキストがURLパラメータにエンコードされ、リンクがクリップボードにコピーされます。同僚がリンクを開くと、まったく同じテスト状態(pattern+flags+testText)が表示されるため、チームコラボレーションやリモートデバッグに最適です。

置換文字列の$1、$&、$`、$'などの特殊記号はどういう意味ですか?

置換文字列では:$1、$2...はN番目のCapture Groupを表します;$&はマッチしたテキスト全体を表します;$`はマッチしたテキストの前の部分を表します;$'はマッチしたテキストの後の部分を表します;$$はリテラル$を表します;$<name>はNamed Groupを表します。例えば`(\d{4})-(\d{2})-(\d{2})`を`$2/$3/$1`で置換すると、2026-03-12が03/12/2026に変換されます。本ツールの置換エリアには、これらの特殊記号のクイック挿入ボタンが用意されています。

正規表現(Regex/RegExp)とは?

正規表現(Regular Expression、略称Regex/RegExp)は、単一の文字列である構文規則に一致する一連の文字列を記述・マッチさせるテキストパターン言語です。その歴史は1950年代に神経科学者Warren McCullochと数学者Walter Pittsが提案したニューロンの数学モデルにさかのぼり、後に数学者Stephen Kleeneが1956年にその上で「正規集合」の代数的記述を提案しました。Unixの父Ken Thompsonは1960年代後半にQEDエディタで正規表現を初めて実装し、その後正規表現はUnixツールチェーン(grep、sed、awk、vi)のコア機能となりました。

現代のプログラミング言語では、正規表現はほぼ標準機能となっています——JavaScriptのRegExp、Pythonのreモジュール、Javaのjava.util.regex、.NETのRegexクラス、Goのregexpパッケージはすべて正規表現をサポートしています。正規表現はフォームバリデーション(メール/電話番号/ID)、テキスト検索&置換(エディタの検索置換)、ログ解析(ERRORログ抽出)、Webスクレイピング(HTMLコンテンツ抽出)、データクレンジング(ETL)、ルートマッチング、入力フィルタリング、セキュリティ(WAFルール)などのシーンで広く使われています。

正規表現のコア概念には:文字クラス(\d数字、\w単語文字、\s空白)、Quantifier(*0回以上、+1回以上、?0回または1回、{n,m}指定回数)、アンカー(^先頭、$末尾、\b単語境界)、Group((...)Capture Group、(?:...)非Capture Group、(?<name>...)Named Group)、分岐(|)、文字セット([a-z])、Lookaround((?=...)正の先読み、(?!)負の先読み)などがあります。正規表現をマスターするとテキスト処理効率が大幅に向上しますが、ReDoSなどのパフォーマンスの落とし穴に注意する必要もあります。

术语表

Regex / RegExp
Regular Expression(正規表現)の略。テキストの検索、置換、検証に使われるテキストマッチングパターンを記述する文字列構文。
Capture Group
括弧(pattern)で囲まれた部分式。マッチ結果は$1、$2で位置によって参照できます。
Named Group
(?<name>pattern)構文で定義されたCapture Group。$<name>で名前によって参照でき、数値参照より可読性が高まります。
ReDoS
Regular Expression Denial of Service(正規表現によるサービス拒否)。壊滅的なBacktrackingにより正規表現の実行時間が指数関数的に増加し、ブラウザやサーバーをフリーズさせます。
Backtracking
NFA正規表現エンジンがマッチの試行に失敗したとき、前の位置に戻って他の可能性を試すメカニズム。複雑な正規表現では指数関数的なバックトラッキングが発生する可能性があります。
Flags
正規表現のマッチング動作を変更するパラメータ。一般的なものはg(グローバル)、i(大文字小文字無視)、m(複数行)、s(dotAll)、u(Unicode)、y(貪欲でない)。
Lookaround
ゼロ幅アサーション。正の先読み(?=...)、負の先読み(?!...)、正の後読み(?<=...)、負の後読み(?<!...)があり、文字を消費せずに位置のみを判定します。
PCRE
Perl Compatible Regular Expressions(Perl互換正規表現)。広く使われている正規表現構文標準で、PHP、Java、Pythonなどほとんどの言語で採用されています。
Web Worker
ブラウザが提供するメインスレッドとは独立したバックグラウンドスレッドAPI。本ツールではWorker内で正規表現を実行し、ReDoSが発生してもUIをブロックしないようにしています。
Quantifier
前の要素の繰り返し回数を指定する構文:*(0回以上)、+(1回以上)、?(0回または1回)、{n}(ちょうどn回)、{n,m}(n回からm回)。

正規表現よく使うメタ文字早見表

メタ文字意味
.任意の1文字(改行を除く、sフラグで改行を含む)a.c は abc、aXc にマッチ、a\ncにはマッチしない
\d数字文字、[0-9]と同等\d{3} は 123、456 にマッチ
\w単語文字、[A-Za-z0-9_]と同等\w+ は hello_123 にマッチ
\s空白文字(スペース/タブ/改行など)a\sb は a b(間のスペース)にマッチ
^文字列の先頭(mフラグで行頭)^Hello は行頭のHelloにマッチ
$文字列の末尾(mフラグで行尾)end$ は行尾のendにマッチ
\b単語境界\bcat\b は単独の単語catにマッチ、categoryにはマッチしない
*前の要素が0回以上繰り返す(貪欲)ab*c は ac、abc、abbc にマッチ
+前の要素が1回以上繰り返すab+c は abc、abbc にマッチ、acにはマッチしない
?前の要素が0回または1回(非貪欲/Lookaroundにも使われる)colou?r は colorとcolourの両方にマッチ
|分岐/または、左または右にマッチcat|dog はcatまたはdogにマッチ
[...]文字セット、中のいずれか1文字にマッチ[aeiou] は任意の母音にマッチ

よく使う正規表現テンプレート早見表

用途正規表現推奨Flags
メールアドレス[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}g
中国大陸の携帯電話番号1[3-9]\d{9}g
URLリンクhttps?:\/\/[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_+.~#?&/=]*gi
IPv4アドレス\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\bg
日付 YYYY-MM-DD\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])g
中国ID番号(18桁)[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dXx]g
UUID[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}gi

Code Examples

JavaScriptでの正規表現マッチと置換

// メールフォーマットを検証
const emailRe = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRe.test('user@example.com')); // true

// Named Groupを抽出(日付パース)
const dateRe = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = '会議時間:2026-03-12、締切:2026-04-01';
const matches = [...text.matchAll(dateRe)];
for (const m of matches) {
  console.log(m.groups.year, m.groups.month, m.groups.day);
}

// 置換:日付フォーマット変換 YYYY-MM-DD → MM/DD/YYYY
const reformatted = text.replace(dateRe, '$<month>/$<day>/$<year>');
console.log(reformatted);
// 会議時間:03/12/2026、締切:04/01/2026

Pythonでのreモジュールの使用

import re

# すべてのマッチを検索
text = '連絡先:alice@example.com、bob@test.org'
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', text)
print(emails)  # ['alice@example.com', 'bob@test.org']

# Named Group抽出(Pythonは?P<name>構文を使用)
date_pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
m = re.search(date_pattern, '公開日 2026-03-12')
if m:
    print(m.group('year'), m.group('month'), m.group('day'))

# 置換:電話番号の中央4桁をマスク
phone_re = r'(1[3-9]\d)\d{4}(\d{4})'
result = re.sub(phone_re, r'\1****\2', '電話番号:13812345678')
print(result)  # 電話番号:138****5678

Javaでのjava.util.regexの使用

import java.util.regex.*;

class RegexDemo {
    public static void main(String[] args) {
        String text = "Error [2026-03-12 18:05:09] Connection failed";

        // 正規表現をコンパイル(本番環境ではPatternインスタンスをキャッシュすべき)
        Pattern p = Pattern.compile(
            "(?<level>INFO|WARN|ERROR)\\s+\\[(?<time>[^\\]]+)\\]\\s+(?<message>.+)"
        );
        Matcher m = p.matcher(text);

        if (m.find()) {
            System.out.println("レベル: " + m.group("level"));
            System.out.println("時間: " + m.group("time"));
            System.out.println("メッセージ: " + m.group("message"));
        }

        // すべての数字を置換
        String cleaned = "abc123def456".replaceAll("\\d+", "*");
        System.out.println(cleaned); // abc*def*
    }
}

Authoritative References