開発・データ

複雑な正規表現をパーツごとに分解解説

他人が書いたパターンを記号ごとに分解して意味を確認する

プロンプト · 変数 2個

私は正規表現の読み解きに慣れていません。コード内で見かけた以下のパターンが、正確に何を許可し何を弾くのかを確認したいです。

正規表現を左から意味のまとまりごとに分割し、ステップバイステップで説明してください。全体要約を先に書くのではなく、各パーツを一つずつ確認した上で最後にまとめてください。

出力形式は次のようにしてください。まず「パーツ・記号の名称・役割・このパーツがないと何が変わるか」の表を作成し、その次に全体の意味を1文で、最後に私が提示した対象文字列がそれぞれマッチするかどうか、どのパーツで通過/ブロックされるかを記載してください。

パターンに実際には存在しない機能は説明に含めないでください。言語やツールによって挙動が異なる記号(後読み、Unicodeプロパティなど)が含まれている場合は、その該当行に注意書きを添えてください。

正規表現: """ {{正規の表現}} """

対象文字列: """ {{対象文字列}} """

コピーしたらここに貼り付け · ChatGPT・Claudeはプロンプト入りで開きます

なぜこう書くのか

このプロンプトは6個のブロックでできています
文脈 手順 形式 制約 入力資料 正規の表現 入力資料 対象文字列 材料 やること 仕上がり 材料

ブロックを押すとその段落が見られます

文脈 材料 · AIが知るべきこと

私は正規表現の読み解きに慣れていません。コード内で見かけた以下のパターンが、正確に何を許可し何を弾くのかを確認したいです。

文脈を伝えるのテクニックを見る
  • 材料 AIが知るべきこと ×3
  • やること 何をどう進めるか ×1
  • 仕上がり どんな形で受け取るか ×2

正規表現の解説を頼むと、大抵は「パスワードの形式をチェックする正規表現です」といった1文だけが返ってきます。間違ってはいませんが、これでは何も対応できません。最小文字数を8から10に変更したくてもどの数字を触ればいいか分からず、特殊文字がなぜ通らないのかも分からないままです。

解説をもっと読む · 3段落

そのため、このプロンプトではステップを強制しています。「左から意味のまとまりごとに分割して一つずつ」と「全体要約を先に書かない」という2つの指示が核心です。先に要約を許すと、AIはその要約に合わせて残りの説明を無理やり辻褄合わせし、パターンに確実に存在するパーツを読み飛ばしてしまいます。パーツから順に見せることで、先読み(Lookahead)のような見落としやすい部分も表に残ります。長さを指定する波括弧や文字セットを開く角括弧がどこで対になっているかも、この過程で明確になります。

形式における「このパーツがないと何が変わるか」の列が、このプロンプトの肝です。意味だけが書かれた表は読んだ後に忘れがちですが、無くした際の違いを併記することで修正すべき箇所が一目で分かります。対象文字列のマッチ可否を最後に確認させているのも同じ理由です。説明が合っているかを実際の値で検算する役割を果たします。

正規表現と対象文字列をそれぞれ """ で囲んでいる理由は2つあります。正規表現にはクォーテーションやバックスラッシュ、波括弧などが混在するため、そのまま貼るとどこまでがパターンかの境界が曖昧になります。また、対象文字列に文章が含まれている場合、AIがそれを指示として誤読するのを防ぐためです。regexの読み方を学んでいる最中なら、表を受け取った後にパーツを1つ削ってみて結果がどう変わるか自身で確認してみるのもおすすめです。

用語が分からなければAha AIで: chain-of-thought, prompt

悪い例との比較

悪い例にないもの: 文脈 · 手順 · 形式 · 制約
悪い例 63字 このプロンプト 410字 文脈 手順 形式 制約 入力資料 文脈 · なし 手順 · なし 形式 · なし 制約 · なし
よくある悪い例

この正規表現は何をしているの? ^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d!@#$%^&*]{8,20}$

「英数字を含む8〜20文字のパスワード検証用です」と1行返ってくるだけです。説明としては合っていますが、冒頭の2つの括弧がなぜ必要なのか、{8,20} が何の長さを測っているのかは依然として分かりません。条件を1つ変えたい場合、結局最初から聞き直すことになります。実際の値を与えていないため、説明が正しいか検証する手立てもありません。

バリエーション

1

通るはずの値が弾かれてしまうとき

解説ではなくデバッグが目的の際に使います。最後の条件を入れないと、条件全体を単に緩めただけのパターンが返ってきてしまいます。

プロンプトを見る

以下の正規表現に以下の値を入力するとマッチしません。どのパーツでどのように不一致になっているのか、左から段階的に指摘してください。その上で、この値まで通過させるにはどこをどう直せばよいか修正パターンとともに提示し、修正したパターンが本来弾くべき値まで通してしまわないかも記述してください。

正規表現: """ {{正規の表現}} """

値: """ {{対象文字列}} """

2

コードに残すコメントを作るとき

次にこのコードを読む人のための形式です。長いと誰も読まないため、3行に制限しています。

プロンプトを見る

以下の正規表現を、コードに残すコメントとして整理してください。3行以内で、何を許可し何を弾くのかと、代表的な例を2つ(通過例1つ、拒否例1つ)含めてください。記号1つひとつに対する細かい説明は含めないでください。

""" {{正規の表現}} """

モデル別の注意

正規表現は言語ごとにサポートされている文法が異なります。どの言語やツールで使うパターンなのかを冒頭に1行書き添えると、見当違いな文法解説を防げます

最終更新 2026-09-02 · 誤りがありますか? 知らせる