Menu
日本語

正規表現テスター

アニメーション付きマッチ表示で正規表現をテスト。

最終更新

フラグ
テスト文字列テキストを貼り付けて開始
マッチマッチなし
マッチがここに表示されます — インデックス、キャプチャグループ、件数すべてリアルタイム。

正規表現テスターとは?

正規表現テスターは、書いた正規表現がサンプルテキストの中でどこにマッチするかを即座に確認できるツールです。開発の現場では、入力値のバリデーション、文字列からのデータ抽出、ログ検索、テキスト整形、エディタのコマンド作成、置換ルールの記述など、あらゆる場面で正規表現(regex)が使われています。

正規表現は、ごく少数の記号に多くの意味が詰め込まれているため、最初は呪文のように見えます。ライブテスターを使えば、その霧が一気に晴れます。1文字打つたびにマッチとキャプチャグループが更新されるので、思い通りの動きになるまで気軽に試行錯誤できます。

言語ごとに正規表現エンジンは少しずつ違います(JavaScript、PCRE、Python、Java、Go、.NETなど)。ただし基礎部分 — 文字、文字クラス、量指定子、アンカー、グループ — はどれも共通です。後読み(lookbehind)、名前付きグループ、絶対最大量指定子(possessive quantifier)といった高度な機能になって初めて、エンジンごとの差が出てきます。

正規表現テスターで身につくこと

  • パターンが表現するのはテキストの「形」であって、「意味」ではない、ということ。\d+ は連続する数字にマッチしますが、その数字が妥当な値かどうかは判断しません。
  • フラグで挙動が変わること。g は全マッチ、i は大文字小文字を無視、m^$ を行頭・行末に対応させ、s. で改行もマッチさせます。
  • キャプチャグループ (...) は、文字列全体がマッチするかを見るだけでなく、マッチの一部を取り出すための仕組み — パース処理で必須です。

正規表現テスターの使い方(ステップ解説)

  1. パターンを入力する

    パターン欄に正規表現を入力します。前後の / は付けないでください — あれはJavaScriptのリテラル構文の一部であって、パターンそのものではありません。

  2. 必要なフラグを切り替える

    よく使うのは g(全マッチを取得)と i(大文字小文字を区別しない)です。行ごとのアンカーを使いたいときは m. で改行にもマッチさせたいときは s を有効にします。

  3. テスト用文字列を貼り付ける

    テスト欄にサンプルテキストを入れます。入力するそばからマッチがハイライトされ、マッチ一覧の下にキャプチャグループも表示されます。

  4. マッチパネルを読む

    それぞれのマッチについて、位置・マッチ全文・キャプチャ内容が表示されます。意図したものを拾えているか、不要なものを取りこぼしなくはじけているかを確認しましょう。

  5. 正解になるまで調整する

    量指定子を絞ったり、アンカー(^$)を追加したり、リテラル文字をエスケープ(\.\?)したりして、コードに渡したい形のマッチとグループになるまで詰めていきます。

正規表現チートシート

実務の99%はこの2割でカバーできる、というラインです。ブックマークしておくのがおすすめ — 文法を一番早く思い出せます。文法の全体像はMDNの正規表現ガイドを参照してください。

トークン意味
.任意の1文字(改行を除く)a.cabca-c にマッチ
\d \D数字 / 数字以外\d+123 にマッチ
\w \W単語文字(英数字とアンダースコア)/ それ以外\w+hello_1 にマッチ
\s \S空白 / 空白以外\s+ はスペースやタブにマッチ
[abc]a、b、c のいずれか[aeiou] は母音にマッチ
[^abc]a、b、c のいずれでもない[^0-9] は数字以外にマッチ
* + ?直前の0回以上 / 1回以上 / 0または1回a+aaaa にマッチ
{n} {n,m}ちょうどn回 / n〜m回\d{3,5} は3〜5桁の数字
^ $文字列の先頭 / 末尾(m 付きで行頭・行末)^Error は行頭が Error
(...)キャプチャグループ(\d+) で数字部分を取り出す
(?:...)非キャプチャグループ(?:foo|bar) キャプチャしないグループ化
a|b選択 — a または byes|no
\b単語境界\bcat\bcat にマッチするが cats にはマッチしない

試してみたい正規表現サンプル

メールアドレスっぽい形にマッチさせる

パターン
^[\w.+-]+@[\w-]+\.[\w.-]+$
テキスト

learner@coddy.tech

なにか@なにか.なにか」という基本形を拾うパターンです。実際のメールアドレスの仕様はこれよりずっと寛容なので、フォームでは type="email" を使い、サーバー側でも検証するのがおすすめです。

文章から数字をすべて抜き出す

パターン
\d+
テキスト

Lesson 12 has 3 tasks and 2 quizzes.

g フラグを付けると、1232 のように連続した数字をすべて拾えます。\d+ は要するに「1文字以上の数字の連続」という意味です。

URLからキャプチャグループでIDを取り出す

パターン
/users/(\d+)
テキスト

/users/42/profile

全体マッチは /users/42、そしてキャプチャグループ (\d+) には 42 だけが取り出されます。コードの中で正規表現を実用的に「使う」ためには、このキャプチャグループが鍵になります。

貪欲マッチと非貪欲マッチ

貪欲(greedy)
<.+>
非貪欲(lazy)
<.+?>
テキスト

<b>hello</b>

貪欲版は .+ が可能な限り長く拾うので、<b>hello</b> 全体がマッチしてしまいます。一方、非貪欲版(+?)は最初の > で止まるため、<b></b> がそれぞれ別々にマッチします。

正規表現でよくあるミス

  • 特殊文字のエスケープ漏れ:.?+()[]{}\^$|。文字そのものとして扱いたいときは、頭に \ を付けます。
  • 1つのサンプルでは動くのに、余分な空白・改行・欠けたフィールドが混じった現実のデータで一気に崩れるパターンを書いてしまうこと。
  • .* を貪欲なまま使い、想定よりはるかに広い範囲を拾ってしまう — .*? か、もっと限定的な文字クラスに切り替えましょう。

正規表現に関するよくある質問

正規表現(regex)とは何ですか?
regexは *regular expression(正規表現)* の略で、テキストにマッチさせるためのコンパクトなパターン記述言語です。ほぼすべてのプログラミング言語、多くのエディタ、そしてコマンドラインツールに同じ仕組みが備わっています。
正規表現はどう書けばいいですか?
まずはマッチさせたいリテラル文字をそのまま書き、可変な部分を文字クラス(\d\w[abc])と量指定子(*+?{n,m})に置き換えていきます。あとは正規表現テスターでパターンを少しずつ調整して、狙ったケースだけにマッチするまで詰めていきましょう。
正規表現の \w はどういう意味ですか?
\w は単語文字(英字・数字・アンダースコア)にマッチします。\W はその逆で、単語文字以外すべてです。具体的にどの文字が含まれるかは、エンジンとUnicodeフラグの有無によって変わります。
正規表現が想定より広くマッチしてしまうのはなぜですか?
量指定子はデフォルトで貪欲なので、.* はできるだけ長くマッチしようとします。非貪欲な量指定子(.*?)に変えるか、もっと限定的な文字クラスを使って止めたい位置で止まるようにしてください。
JavaScriptの正規表現は他の言語の正規表現と同じですか?
基本部分は同じですが、エンジンごとに違いがあります。JavaScript、PCRE、Pythonのre、Java、Go、.NETでは、サポートされるフラグや高度な機能(lookbehindの対応状況、名前付きグループ、絶対最大量指定子など)が少しずつ異なります。
初心者も正規表現を学んだほうがいいですか?
はい、ただし段階的に。まずはリテラル、文字クラス、量指定子、アンカー、フラグ、キャプチャグループまで。lookaround(先読み・後読み)、名前付きグループ、条件付き正規表現は後回しでOKです。

詳しく見る

その他の開発者ツール

Coddyでコードを学ぼう

始める