本ページはプロモーションが含まれています

ギャラリー

正規表現ラボ|一致した場所が光って見える

/regex/(一致した場所が光る)

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

正規表現は、読んで覚えるより当てて覚えるほうが早いです。

入力したそばから、一致した場所が光る実験台を作りました。

グループは色分けされ、パターンは日本語に読み下されます。

さらに、置換の結果をその場で確かめられ、8問の練習問題で腕試しもできます。


      
      
    
一致した箇所 0件
    パターンの読み下し
      練習問題

      好きな問題を選んで、当てはまる正規表現を書いてみてください。

      使い方

      • 上の枠に正規表現、左下の枠に試したい文字列を入れます。打つたびに結果が変わります
      • g i m s はフラグです。gは全部探す、iは大文字小文字を無視、mは^ $を行ごとに、sは.を改行にも一致させます
      • 右の「→」の枠に置換後の文字列を入れると、置き換えた結果が下に出ます。$1 や $<name> が使えます
      • 右上に一致した文字列・位置・グループの中身が並びます
      • 右下は、いま書いているパターンを1記号ずつ日本語に直したものです
      • 「よく使うパターンを選ぶ」から、メール・URL・日付・郵便番号・HTMLタグなどを呼び出せます

      練習問題(8問)

      右下の「練習問題」から選ぶと、お題の文章に入れ替わります。

      書いた正規表現の一致がお手本とぴったり同じになれば正解です。

      1. 3桁ちょうどの数字を取り出す(\bの練習)
      2. 郵便番号だけを取り出す(桁数の固定)
      3. メールアドレスを取り出す(文字クラス)
      4. httpsのURLだけ(httpを除く)
      5. 行頭が#の行(mフラグ)
      6. 「さん」の前の名前だけ(先読み(?=...))
      7. 同じ語の繰り返し(後方参照\1)
      8. HTMLタグを1つずつ(貪欲を避ける)

      判定は「何個一致したか」ではなく、一致した文字列そのものを突き合わせています。

      数だけ合っていても、違う場所を拾っていれば×になります。

      手を動かす順番のおすすめ

      1. \d だけを入れて、数字が1文字ずつ光るのを見る
      2. \d+ にして、数字のかたまりに変わるのを見る
      3. \d{4} で4桁だけに絞る
      4. (\d{4})-(\d{2}) のように括弧で囲み、右側に $1 $2 が出るのを見る
      5. (?<year>\d{4}) と名前を付けて、year=2026 に変わるのを見る
      6. 置換の枠に $<year>年 と入れて、文章が置き換わるのを見る

      括弧は「まとめる」だけでなく「取り出す」ための道具です。

      この2つの役割が同時にあることが、最初の混乱のもとになります。

      取り出す必要がないときは (?:...) を使う、と覚えておくと後で楽になります。

      早見表

      書き方意味
      .改行以外の任意の1文字
      \d \w \s数字/英数字とアンダースコア/空白
      \D \W \Sそれぞれの逆
      [abc] [^abc]どれか1文字/それ以外の1文字
      [a-z] [ぁ-ん]範囲指定(ひらがなや漢字にも使えます)
      * + ?0回以上/1回以上/あってもなくてもよい
      {3} {2,} {1,3}ちょうど3回/2回以上/1〜3回
      *? +?同じ繰り返しでも、最短で止める
      ^ $行(または全体)の先頭・末尾
      \b単語の切れ目
      (...) (?:...)取り出す/まとめるだけ
      (?<name>...)名前を付けて取り出す
      (?=...) (?!...)先読み/否定先読み(文字を消費しない)
      \1 $11番目のグループ(検索側/置換側)

      つまずきやすいところ

      • 貪欲と最短:<.+> はタグ1つではなく、行の端から端まで飲み込みます。<.+?> にすると最短で止まります
      • ^ $ は行ではない:既定では文字列全体の先頭と末尾です。行ごとに判定したいときは m フラグを付けます
      • . は改行に当たらない:複数行をまたいで取りたいときは s フラグが要ります
      • 記号はエスケープが必要:. ? + ( [ などをそのままの文字として探すときは \. のように書きます
      • 爆発するパターンがある:(a+)+$ のような書き方は、当たらない文字列に対して候補が指数的に増え、実行が終わらなくなります(catastrophic backtracking)。このページでは照合を別スレッドで実行し、1.5秒で中断して警告を出します。実際に入れてみると、その挙動が確かめられます

      正規表現は、覚える記号の数より「試した回数」で身に付きます。

      8問を全部○にしてから、手元のログやCSVを貼り付けてみてください。

      • この記事を書いた人
      • 最新記事

      トム

      SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
      ・Javaバックエンドエンジニア(Java歴12年以上)
      ・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
      詳細なプロフィール

      -ギャラリー