正規表現テスター
还没有匹配结果
输入正则与文本后,这里会展示每个匹配、捕获组和命名分组。
统计
命名分组汇总
当前没有命名分组。
無料オンライン正規表現テスター(Regex Tester)。JSリアルタイムマッチングテスト、Capture Group/Named Group表示、置換プレビュー、正規表現構文解説をサポート。Web WorkerによるReDoSタイムアウト保護を内蔵し、よく使う正規表現テンプレート集付き。開発者が正規表現を素早くデバッグ・検証するのに最適です。
还没有匹配结果
输入正则与文本后,这里会展示每个匹配、捕获组和命名分组。
统计
命名分组汇总
当前没有命名分组。
無料オンライン正規表現テスター(Regex Tester)。JSリアルタイムマッチングテスト、Capture Group/Named Group表示、置換プレビュー、正規表現構文解説をサポート。Web WorkerによるReDoSタイムアウト保護を内蔵し、よく使う正規表現テンプレート集付き。開発者が正規表現を素早くデバッグ・検証するのに最適です。
ReDoS(Regular Expression Denial of Service、正規表現によるサービス拒否攻撃)とは、悪意を持って作成された正規表現(例:`(a+)+$`で長い文字列をマッチさせる)が壊滅的なバックトラッキング(catastrophic backtracking)を引き起こし、CPU使用率100%、ブラウザフリーズ、サーバークラッシュを引き起こす現象です。本ツールはWeb Workerサンドボックス内で正規表現マッチングを実行し、500msでタイムアウトして自動中断するため、バックトラッキングを引き起こす悪意のある正規表現を入力してもブラウザがフリーズすることはありません。これが本ツールのコアなセキュリティ機能です。
g(global)は最初の1つだけでなくすべてのマッチを検索します;i(ignoreCase)は大文字小文字を無視します;m(multiline)は^と$を各行の先頭/末尾にマッチさせます;s(dotAll)はドット.に改行文字を含むすべての文字をマッチさせます;u(unicode)はUnicodeモードでemojiやマルチバイト文字を正しく処理します;y(sticky)はlastIndex位置から正確にマッチする貪欲でないマッチングを行います。本ツールでは6つのFlagsの視覚的なトグルボタンを提供しており、クリックでリアルタイムにオン/オフできます。
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、$2...はN番目のCapture Groupを表します;$&はマッチしたテキスト全体を表します;$`はマッチしたテキストの前の部分を表します;$'はマッチしたテキストの後の部分を表します;$$はリテラル$を表します;$<name>はNamed Groupを表します。例えば`(\d{4})-(\d{2})-(\d{2})`を`$2/$3/$1`で置換すると、2026-03-12が03/12/2026に変換されます。本ツールの置換エリアには、これらの特殊記号のクイック挿入ボタンが用意されています。
正規表現(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などのパフォーマンスの落とし穴に注意する必要もあります。
| メタ文字 | 意味 | 例 |
|---|---|---|
. | 任意の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?)\b | g |
| 日付 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 |
// メールフォーマットを検証
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/2026import 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****5678import 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*
}
}