メールアドレスっぽい形にマッチさせる
^[\w.+-]+@[\w-]+\.[\w.-]+$learner@coddy.tech
「なにか@なにか.なにか」という基本形を拾うパターンです。実際のメールアドレスの仕様はこれよりずっと寛容なので、フォームでは type="email" を使い、サーバー側でも検証するのがおすすめです。
アニメーション付きマッチ表示で正規表現をテスト。
最終更新
正規表現テスターは、書いた正規表現がサンプルテキストの中でどこにマッチするかを即座に確認できるツールです。開発の現場では、入力値のバリデーション、文字列からのデータ抽出、ログ検索、テキスト整形、エディタのコマンド作成、置換ルールの記述など、あらゆる場面で正規表現(regex)が使われています。
正規表現は、ごく少数の記号に多くの意味が詰め込まれているため、最初は呪文のように見えます。ライブテスターを使えば、その霧が一気に晴れます。1文字打つたびにマッチとキャプチャグループが更新されるので、思い通りの動きになるまで気軽に試行錯誤できます。
言語ごとに正規表現エンジンは少しずつ違います(JavaScript、PCRE、Python、Java、Go、.NETなど)。ただし基礎部分 — 文字、文字クラス、量指定子、アンカー、グループ — はどれも共通です。後読み(lookbehind)、名前付きグループ、絶対最大量指定子(possessive quantifier)といった高度な機能になって初めて、エンジンごとの差が出てきます。
\d+ は連続する数字にマッチしますが、その数字が妥当な値かどうかは判断しません。g は全マッチ、i は大文字小文字を無視、m は ^ と $ を行頭・行末に対応させ、s は . で改行もマッチさせます。(...) は、文字列全体がマッチするかを見るだけでなく、マッチの一部を取り出すための仕組み — パース処理で必須です。パターン欄に正規表現を入力します。前後の / は付けないでください — あれはJavaScriptのリテラル構文の一部であって、パターンそのものではありません。
よく使うのは g(全マッチを取得)と i(大文字小文字を区別しない)です。行ごとのアンカーを使いたいときは m、. で改行にもマッチさせたいときは s を有効にします。
テスト欄にサンプルテキストを入れます。入力するそばからマッチがハイライトされ、マッチ一覧の下にキャプチャグループも表示されます。
それぞれのマッチについて、位置・マッチ全文・キャプチャ内容が表示されます。意図したものを拾えているか、不要なものを取りこぼしなくはじけているかを確認しましょう。
量指定子を絞ったり、アンカー(^、$)を追加したり、リテラル文字をエスケープ(\.、\?)したりして、コードに渡したい形のマッチとグループになるまで詰めていきます。
実務の99%はこの2割でカバーできる、というラインです。ブックマークしておくのがおすすめ — 文法を一番早く思い出せます。文法の全体像はMDNの正規表現ガイドを参照してください。
| トークン | 意味 | 例 |
|---|---|---|
. | 任意の1文字(改行を除く) | a.c は abc、a-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+ は a、aaa にマッチ |
{n} {n,m} | ちょうどn回 / n〜m回 | \d{3,5} は3〜5桁の数字 |
^ $ | 文字列の先頭 / 末尾(m 付きで行頭・行末) | ^Error は行頭が Error |
(...) | キャプチャグループ | (\d+) で数字部分を取り出す |
(?:...) | 非キャプチャグループ | (?:foo|bar) キャプチャしないグループ化 |
a|b | 選択 — a または b | yes|no |
\b | 単語境界 | \bcat\b は cat にマッチするが cats にはマッチしない |
^[\w.+-]+@[\w-]+\.[\w.-]+$learner@coddy.tech
「なにか@なにか.なにか」という基本形を拾うパターンです。実際のメールアドレスの仕様はこれよりずっと寛容なので、フォームでは type="email" を使い、サーバー側でも検証するのがおすすめです。
\d+Lesson 12 has 3 tasks and 2 quizzes.
g フラグを付けると、12、3、2 のように連続した数字をすべて拾えます。\d+ は要するに「1文字以上の数字の連続」という意味です。
/users/(\d+)/users/42/profile
全体マッチは /users/42、そしてキャプチャグループ (\d+) には 42 だけが取り出されます。コードの中で正規表現を実用的に「使う」ためには、このキャプチャグループが鍵になります。
<.+><.+?><b>hello</b>
貪欲版は .+ が可能な限り長く拾うので、<b>hello</b> 全体がマッチしてしまいます。一方、非貪欲版(+?)は最初の > で止まるため、<b> と </b> がそれぞれ別々にマッチします。
.、?、+、(、)、[、]、{、}、\、^、$、|。文字そのものとして扱いたいときは、頭に \ を付けます。.* を貪欲なまま使い、想定よりはるかに広い範囲を拾ってしまう — .*? か、もっと限定的な文字クラスに切り替えましょう。\d、\w、[abc])と量指定子(*、+、?、{n,m})に置き換えていきます。あとは正規表現テスターでパターンを少しずつ調整して、狙ったケースだけにマッチするまで詰めていきましょう。\w はどういう意味ですか?\w は単語文字(英字・数字・アンダースコア)にマッチします。\W はその逆で、単語文字以外すべてです。具体的にどの文字が含まれるかは、エンジンとUnicodeフラグの有無によって変わります。.* はできるだけ長くマッチしようとします。非貪欲な量指定子(.*?)に変えるか、もっと限定的な文字クラスを使って止めたい位置で止まるようにしてください。re、Java、Go、.NETでは、サポートされるフラグや高度な機能(lookbehindの対応状況、名前付きグループ、絶対最大量指定子など)が少しずつ異なります。