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

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

プロンプト · 変数 2個

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

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

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

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

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

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

コピーしたらここに貼り付け · ChatGPT・Claudeはプロンプト入りで開きます ChatGPTで開く ↗Claudeで開く ↗Geminiで開く ↗ ビルダーで編集 授業用カード画像を保存

なぜこう書くのか

文脈
私は正規表現の読み解きに慣れていません。コード内で見かけた以下のパターンが、正確に何を許可し何を弾くのかを確認したいです。
手順
正規表現を左から意味のまとまりごとに分割し、ステップバイステップで説明してください。全体要約を先に書くのではなく、各パーツを一つずつ確認した上で最後にまとめてください。
形式
出力形式は次のようにしてください。まず「パーツ・記号の名称・役割・このパーツがないと何が変わるか」の表を作成し、その次に全体の意味を1文で、最後に私が提示した対象文字列がそれぞれマッチするかどうか、どのパーツで通過/ブロックされるかを記載してください。
制約
パターンに実際には存在しない機能は説明に含めないでください。言語やツールによって挙動が異なる記号(後読み、Unicodeプロパティなど)が含まれている場合は、その該当行に注意書きを添えてください。
入力資料
正規表現: """ {{正規の表現}} """
入力資料
対象文字列: """ {{対象文字列}} """

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

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

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

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

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

悪い例との比較

よくある悪い例

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

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

バリエーション

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

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

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

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

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

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

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

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

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

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

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

モデル別の注意

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

関連プロンプト

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