コピペで使える!オンライン正規表現ジェネレーターでラクラク作成
「ログファイルから特定のエラーメッセージだけを抜き出したい」
「大量の顧客リストからメールアドレスだけを抽出したい」
「入力フォームで、ユーザーが正しい形式の郵便番号を入力したかチェックしたい」
プログラミング、データ分析、Webマーケティングなど、コンピュータを使った業務において、このような「テキストデータの中から特定のパターンの文字列を見つけ出す」という作業は頻繁に発生します。この課題を解決する魔法の杖、それが正規表現(Regular Expression)です。
正規表現は、使いこなせば非常に強力なツールです。手作業なら数時間、あるいは数日かかるような膨大なテキスト処理も、たった一行の正規表現で一瞬にして完了させることができます。しかし、その一方で、多くの初学者を絶望の淵に突き落としてきた存在でもあります。
^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
これはメールアドレスを検証するための正規表現の一例ですが、まるで古代の呪文か暗号のように見えませんか? この記号の羅列を見て、「うわ、無理だ…」とそっとページを閉じた経験がある方も少なくないでしょう。
しかし、諦めるのはまだ早い。
この記事は、かつて正規表現に挫折した、あるいはこれから学ぼうとしているけれど何から手をつけていいか分からない、そんな全ての人のために書かれました。専門知識がなくても、まるで魔法のように正規表現を生成し、テストし、コピペで自分のプログラムやツールに組み込める「オンライン正規表現ジェネレーター」という強力な味方がいるからです。
この記事を最後まで読めば、あなたは以下のことができるようになります。
- 正規表現がなぜ必要で、どれほど便利かを理解できる。
- 正規表現の基本的な読み書きのルールが分かる。
- Regex101などのオンラインジェネレーターを自在に使いこなし、目的の正規表現をラクラク作成できる。
- メールアドレスや電話番号など、実用的な正規表現パターンをコピペしてすぐに使える。
- ChatGPTなどのAIを活用し、自然言語で指示するだけで複雑な正規表現を生成できるようになる。
もう正規表現は怖くありません。この記事をガイドに、テキスト処理の達人への第一歩を踏み出しましょう。
第1章:正規表現とは?基本の「キ」
オンラインジェネレーターの話に入る前に、まずは「正規表現とは何か?」という基本を少しだけ押さえておきましょう。敵を知り己を知れば百戦殆うからず。基本的な概念を理解しておくだけで、ジェネレーターの使いこなし方が格段に変わってきます。
正規表現の正体
正規表現とは、一言で言えば「文字列のパターンを表現するための、特殊なルールで書かれた文字列」です。
例えば、「猫」という文字列を探すのは簡単です。しかし、「『猫』または『犬』という文字列を探したい」場合はどうでしょう?さらに、「3桁の数字を探したい」「アルファベットで始まり、数字で終わる5文字の単語を探したい」といった複雑な条件になると、単純な文字列検索では対応できません。
正規表現は、このような「パターン」を記述するためのミニ言語なのです。[猫犬]
と書けば「猫または犬」にマッチし、\d{3}
と書けば「3桁の数字」にマッチします。
なぜ正規表現が必要なのか?具体的なユースケース
正規表現は、以下のような様々な場面で絶大な威力を発揮します。
-
入力フォームのバリデーション(検証)
- メールアドレス:
[email protected]
のような形式になっているか? - 電話番号:
090-1234-5678
のような形式になっているか? ハイフンの有無も許容したい。 - 郵便番号:
123-4567
のように3桁-4桁の数字になっているか? - パスワード強度: 「8文字以上で、英大文字、英小文字、数字をそれぞれ1つ以上含む」といったルールを満たしているか?
- メールアドレス:
-
データ抽出(スクレイピング・ログ分析)
- Webページから: 特定のサイトから商品名と価格だけを抜き出す。
- ログファイルから: 大量のアクセスログから、特定のエラーコードを含む行だけを抽出する。
- 文章から: 長い文章の中から、日付やURL、人名などをすべてリストアップする。
-
検索と置換
- コードエディタで: プロジェクト内のすべてのファイルから、古い関数名を新しい関数名に一括で置換する。
- テキスト整形: 文章中の不要な空白やHTMLタグをすべて削除する。
- データクレンジング: 表記揺れ(例:「株式会社〇〇」と「(株)〇〇」)を統一する。
これらの作業を手作業で行うことを想像してみてください。うんざりするほど時間がかかり、ミスも発生しやすくなります。正規表現は、これらの定型作業を自動化し、私たちの貴重な時間を節約してくれるのです。
最低限覚えておきたい!基本のメタ文字
正規表現では、特別な意味を持つ記号を「メタ文字」と呼びます。すべてを覚える必要はありませんが、代表的なものをいくつか知っておくと、ジェネレーターが生成した正規表現を読んだり、簡単な修正を加えたりする際に非常に役立ちます。
メタ文字 | 意味 | 例 | マッチする例 |
---|---|---|---|
. (ドット) |
任意の一文字(改行を除く) | a.c |
abc , axc , a3c |
* (アスタリスク) |
直前の文字の0回以上の繰り返し | ab*c |
ac , abc , abbbc |
+ (プラス) |
直前の文字の1回以上の繰り返し | ab+c |
abc , abbbc (acはマッチしない) |
? (クエスチョンマーク) |
直前の文字の0回または1回の繰り返し | colou?r |
color , colour |
^ (ハット) |
行の先頭 | ^abc |
abc で始まる行 |
$ (ドル) |
行の末尾 | xyz$ |
xyz で終わる行 |
[] (角括弧) |
角括弧内のいずれかの一文字 | [abc] |
a , b , c のいずれか |
[a-z] |
aからzまでのいずれかの一文字(範囲指定) | [0-9] |
0 ~9 のいずれかの数字 |
() (丸括弧) |
グループ化 | (ab)+ |
ab , abab , ababab |
\d |
任意の数字一文字([0-9] と同じ) |
\d\d\d |
123 , 987 |
\w |
任意の英数字とアンダースコア([a-zA-Z0-9_] と同じ) |
\w+ |
abc , word1 , _test |
\s |
任意の空白文字(スペース、タブ、改行など) | hello\sworld |
hello world |
いかがでしょうか。これらの記号を組み合わせることで、複雑なパターンを表現できることが少しイメージできたでしょうか。
しかし、やはりこれらを組み合わせて目的の正規表現をゼロから作るのは至難の業です。そこで、いよいよ次章から本題の「オンライン正規表現ジェネレーター」の登場です。
第2章:もう挫折しない!オンライン正規表現ジェネレーターとは?
正規表現の学習曲線が急峻であることは、多くの開発者が認めるところです。しかし、現代にはこの壁を乗り越えるための強力なツールがあります。それがオンライン正規表現ジェネレーターです。
ジェネレーターがもたらす5つの革命的メリット
オンライン正規表現ジェネレーターとは、Webブラウザ上で正規表現を作成し、テストできるツールのことです。これを利用することで、以下のような計り知れないメリットが得られます。
-
専門知識がなくても正規表現が作れる
最大のメリットはこれです。多くのジェネレーターは、作りたいパターンの説明を入力したり、UI上で選択したりするだけで、正規表現を自動生成してくれます。もうメタ文字の複雑な組み合わせに頭を悩ませる必要はありません。 -
リアルタイムでテストできる(試行錯誤が超簡単)
正規表現を書いて、テスト用の文字列を入力すると、どの部分にマッチしたかがリアルタイムでハイライト表示されます。これにより、「ここもマッチさせたいのに…」「ここはマッチさせたくないのに…」といった調整が、目で見て直感的に行えます。トライ&エラーのサイクルが劇的に速くなります。 -
視覚的に分かりやすいインターフェース
多くのツールは、複雑な正規表現をパーツごとに分解し、それぞれが何を意味しているのかを平易な言葉で解説してくれます。これは、正規表現の「読解」に非常に役立ち、学習ツールとしても極めて優秀です。 -
各プログラミング言語用のコードを生成
正規表現の書き方は、Python, JavaScript, PHP, Javaなど、言語によって微妙に異なる場合があります(これを「方言(Flavor)」と呼びます)。優れたジェネレーターは、目的の言語を選択するだけで、その言語ですぐに使えるコードスニペット(短いコードの断片)を自動で生成してくれます。 -
豊富なサンプルと逆引き検索
「メールアドレス」「URL」といったよく使われる正規表現のサンプルが豊富に用意されているツールもあります。自分で作るまでもなく、目的に合ったものを探してコピペするだけで済むことも少なくありません。
代表的なオンライン正規表現ジェネレーター
世の中には多くの正規表現ジェネレーターが存在しますが、ここでは特に有名で強力なものを厳選して紹介します。
1. Regex101 (https://regex101.com/)
特徴:
* デファクトスタンダード: おそらく世界で最も利用されている正規表現ツール。
* 超高機能: 詳細な解説、マッチ情報の分析、デバッガー、コードジェネレーター、チートシートなど、考えられる機能はほぼすべて揃っている。
* 方言(Flavor)のサポートが豊富: PCRE (PHP), ECMAScript (JavaScript), Python, Go, Java, C#など、主要な言語の方言に完璧に対応。
* 初心者からプロまで: 機能が豊富なため最初は戸惑うかもしれませんが、慣れればこれ一つで完結します。学習にも実用にも最適。
2. RegExr (https://regexr.com/)
特徴:
* 直感的なUI: Regex101よりもシンプルで、視覚的に分かりやすいインターフェースが特徴。
* インタラクティブなチートシート: サイドバーにあるチートシートをクリックすると、そのメタ文字が正規表現入力欄に自動で挿入され、解説が表示されます。初心者には非常に親切な設計。
* コミュニティパターン: 他のユーザーが作成した便利な正規表現パターンを検索・利用できます。
3. iHateRegex (https://ihaveregex.io/ かつてはihateregex.io)
特徴:
* 目的からの逆引き: 「正規表現が嫌いな人」をターゲットにしたユニークなツール。「Username」「Email」「URL」などの目的を選ぶと、対応する正規表現と、それがどのようにマッチするのかを視覚的なダイアグラムで表示してくれます。
* コピペに最適: 複雑な機能はなく、「探して、コピペする」という用途に特化しています。すぐに結果が欲しい場合に非常に便利です。
4. ChatGPT / Claude などのAIツール
特徴:
* 自然言語で生成: 「日本の携帯電話番号を、ハイフンあり・なし両対応で抽出する正規表現を教えて」のように、日本語で指示するだけで正規表現を生成してくれます。
* 対話的な修正: 「もっと厳密にして」「このパターンは除外して」といった追加の要望を伝えることで、正規表現を対話的に改善できます。
* 究極の初心者向け: メタ文字の知識がゼロでも利用可能です。ただし、時々間違った表現を生成することもあるため、後述するRegex101などで検証することが重要です。
ツール比較表
ツール名 | 特徴 | おすすめのユーザー |
---|---|---|
Regex101 | 高機能、詳細な解説、多言語対応。デファクトスタンダード。 | 初心者からプロまで。正規表現を学びたい人、仕事で本格的に使う人。 |
RegExr | 直感的なUI、インタラクティブなチートシート。 | 正規表現に初めて触れる人、視覚的に理解したい人。 |
iHateRegex | 目的からの逆引き、視覚的なダイアグラム。 | とにかく早くコピペで使いたい人、正規表現の仕組みに興味がない人。 |
ChatGPT等 | 自然言語で生成、対話的な修正。 | 複雑な要件がある場合、メタ文字を覚えたくない究極の初心者。 |
まずはRegex101を基本のツールとして使い方をマスターし、用途に応じて他のツールを使い分けるのがおすすめです。次章では、そのRegex101の具体的な使い方を徹底的に解説します。
第3章:【実践編】Regex101を使ってみよう!
この章では、正規表現ジェネレーターの王様、Regex101の基本的な使い方を、具体的なケーススタディを通してステップ・バイ・ステップで学んでいきます。百聞は一見に如かず。実際に手を動かしながら読み進めてみてください。
Regex101の画面構成
まず、Regex101にアクセスしてください。画面はいくつかのパネルに分かれています。
(注: 画像は説明のためのイメージです)
- FLAVOR (左上): ここで、使用するプログラミング言語などの方言を選択します。
PCRE2 (PHP >= 7.3)
やECMAScript (JavaScript)
などがよく使われます。まずはPCRE2
のままで大丈夫です。 - REGULAR EXPRESSION (上部): ここに正規表現を入力します。
- TEST STRING (中央): ここに、正規表現を試したいテスト用の文字列を入力します。
- EXPLANATION (右パネル): 入力した正規表現が、どの部分がどのような意味を持つのかを英語で詳細に解説してくれます。学習に最適です。
- MATCH INFORMATION (右パネル): テスト文字列のうち、正規表現にマッチした部分のリストが表示されます。
- SUBSTITUTION (下部): マッチした部分を別の文字列に置換する機能です。
- Code Generator (左メニュー): 完成した正規表現を、選択した言語のコードとして生成します。
では、これらの機能を使いながら、具体的な課題を解決していきましょう。
ケーススタディ1:メールアドレスを抽出する
課題: 次の文章から、メールアドレスだけをすべて抜き出したい。
山田太郎の連絡先は [email protected] です。
サポートへのお問い合わせは [email protected] までお願いします。
無効なアドレス: [email protected]
また、[email protected] にもご連絡ください。
Step 1: テスト文字列の入力
まず、TEST STRING
の欄に上記の文章をコピー&ペーストします。
Step 2: 正規表現の入力
次に、REGULAR EXPRESSION
の欄に、メールアドレスにマッチする正規表現を入力します。ここでは、一般的なものを入力してみましょう。
[\w\.\-]+@[\w\-]+\.[\w\.\-]+
これを入力した瞬間、魔法が起こります。
TEST STRING
欄の[email protected]
、[email protected]
、[email protected]
の部分が青くハイライトされます。MATCH INFORMATION
パネルに、マッチした3つのメールアドレスがリストアップされます。EXPLANATION
パネルには、入力した正規表現の各部分の解説が表示されます。
EXPLANATIONの解説例(日本語訳):
[\w\.\-]+
:\w
(英数字アンダースコア),.
(ドット),-
(ハイフン) のいずれかの文字が1回以上繰り返される部分にマッチします。(@の前の部分)@
:@
という文字そのものにマッチします。[\w\-]+
:\w
(英数字アンダースコア),-
(ハイフン) のいずれかの文字が1回以上繰り返される部分にマッチします。(ドメイン名部分)\.
:.
(ドット) という文字そのものにマッチします。(\
でエスケープしないと「任意の一文字」の意味になるため)[\w\.\-]+
: 再び、トップレベルドメイン(comやco.jpなど)にマッチします。
このように、Regex101を使えば、正規表現が正しく機能しているかを目で見て確認し、同時にその意味まで理解することができるのです。
Step 3: コードを生成する
無事にメールアドレスを抽出できたので、これを自分のプログラムで使ってみましょう。
左側のメニューから Code Generator
をクリックします。
言語リストから、例えば Python
を選択します。
すると、以下のようなPythonコードが自動で生成されます。
“`python
import re
regex = r”[\w.-]+@[\w-]+.[\w.-]+”
test_str = (“山田太郎の連絡先は [email protected] です。\n”
“サポートへのお問い合わせは [email protected] までお願いします。\n”
“無効なアドレス: [email protected]\n”
“また、[email protected] にもご連絡ください。”)
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print (“Match {matchNum} was found at {start}-{end}: {match}”.format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups()) + 1):
print (“Group {groupNum} found at {start}-{end}: {group}”.format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
“`
あとはこのコードを自分のプロジェクトにコピペして、test_str
の部分を実際のデータに置き換えれば、すぐにメールアドレス抽出機能が実装できてしまいます。
ケーススタディ2:HTMLタグを削除する(置換機能の活用)
課題: 次のHTMLスニペットから、HTMLタグ(<p>
や<a>
など)をすべて削除して、中のテキストだけを取り出したい。
“`html
これはリンクです。
“`
Step 1: テスト文字列と正規表現の入力
TEST STRING
に上記のHTMLを入力します。REGULAR EXPRESSION
に、HTMLタグにマッチする正規表現<[^>]+>
を入力します。
正規表現の解説:
* <
: <
という文字にマッチ。
* [^>]+
: >
以外の文字([^]
は否定の文字クラス)が1回以上(+
)続く部分にマッチ。
* >
: >
という文字にマッチ。
これで、<p class="main-text">
, <a href="/link">
, </a>
, </p>
の4つがマッチするはずです。
Step 2: 置換機能を使う
次に、画面下部の SUBSTITUTION
パネルに注目してください。この欄は、デフォルトでは空になっています。
空のままにしておくと、「マッチした部分を空文字列に置き換える」、つまり「削除する」という意味になります。
SUBSTITUTION
パネルのすぐ下に、置換後の結果が表示されます。
これはリンクです。
見事にタグが消え、テキストだけが残りました。この置換機能は、データクレンジングやテキスト整形において非常に強力な武器となります。
第4章:【コピペOK】実用的な正規表現パターン集
理論やツールの使い方は分かったけれど、結局のところ「すぐに使えるサンプルが欲しい!」という方も多いでしょう。この章では、様々なシチュエーションで役立つ実用的な正規表現パターンを、解説と使用例付きでご紹介します。
これらはすべてRegex101でテスト済みです。気に入ったものがあれば、どんどんコピー&ペーストして活用してください。
【基本のバリデーション】
1. 郵便番号(日本)
ハイフンあり・なしの両方に対応します。
- 正規表現:
^\d{3}-?\d{4}$
- 解説:
^
: 行頭\d{3}
: 3桁の数字-?
: ハイフンが0回または1回\d{4}
: 4桁の数字$
: 行末
- マッチする例:
100-0001
,1000001
- マッチしない例:
10-0001
,100-00001
,100-000
2. 電話番号(日本、携帯電話)
090, 080, 070で始まり、ハイフンあり・なし両対応。
- 正規表現:
^0[789]0-?\d{4}-?\d{4}$
- 解説:
^0
: 0で始まる[789]0
: 70, 80, 90のいずれか-?
: ハイフンが0回または1回\d{4}
: 4桁の数字
- マッチする例:
090-1234-5678
,08012345678
,070-1111-2222
- マッチしない例:
03-1234-5678
,090-123-4567
(桁数不足)
3. メールアドレス(簡易版)
一般的なメールアドレスの形式をチェックします。完全にRFCに準拠するのは非常に複雑なため、実用上はこれで十分な場合が多いです。
- 正規表現:
^[a-zA-Z0-9_.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9.\-]+$
- 解説:
[a-zA-Z0-9_.\-]+
: アットマーク前のユーザー名部分。英数字、アンダースコア、ドット、ハイフンが使用可能。@
: アットマーク。[a-zA-Z0-9\-]+
: ドメイン名部分。\.
: ドット。[a-zA-Z0-9.\-]+
: トップレベルドメイン部分(.com, .co.jpなど)。
- マッチする例:
[email protected]
,[email protected]
- マッチしない例:
[email protected]
,test@example
,[email protected]
4. URL
http, httpsに対応。
- 正規表現:
^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$
- 解説: これは非常に複雑ですが、Web上のほとんどのURLにマッチします。ジェネレーターなしで作るのは困難な良い例です。
- マッチする例:
http://example.com
,https://www.example.co.jp/path/to/page?query=1
- マッチしない例:
ftp://example.com
,example.com
(http/httpsがない)
5. 全角カタカナのみ
- 正規表現:
^[\u30A1-\u30F6]+$
- 解説: Unicodeの文字範囲を指定しています。「ァ」から「ヶ」までの文字にマッチします。
- マッチする例:
ヤマダタロウ
,テスト
- マッチしない例:
山田太郎
,テスト
(半角)
6. パスワード強度チェック
「8文字以上で、英大文字、英小文字、数字をそれぞれ1つ以上含む」というよくある要件。
- 正規表現:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
- 解説:
(?=...)
は「肯定の先読み」という高度なテクニックで、「その位置以降に…のパターンが存在する」ことをチェックします。(?=.*[a-z])
: どこかに小文字があるか(?=.*[A-Z])
: どこかに大文字があるか(?=.*\d)
: どこかに数字があるか[a-zA-Z\d]{8,}
: 最後に、全体が8文字以上の英数字であることを確認
- マッチする例:
Password123
,aB3defgh
- マッチしない例:
password
,PASSWORD123
(小文字なし),Password
(数字なし),Pass123
(7文字)
【データ抽出・整形】
7. HTMLタグの除去
(ケーススタディで紹介したもの)
- 正規表現:
<[^>]+>
- 使用法: マッチした部分を空文字列に置換します。
- 入力例:
<p>Hello, <strong>World</strong>!</p>
- 出力例:
Hello, World!
8. 特定のドメインのメールアドレスだけを抽出
example.com
ドメインのメールアドレスだけを抽出したい場合。
- 正規表現:
[\w.\-]+@example\.com
- 解説: ドメイン部分を固定しています。
\.
のようにドットをエスケープするのを忘れないようにしましょう。 - マッチする例:
[email protected]
,[email protected]
- マッチしない例:
[email protected]
,[email protected]
9. ログファイルから日付と時刻を抽出
YYYY-MM-DD HH:MM:SS
の形式の日付と時刻を抽出します。
- 正規表現:
\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}
- 解説:
\d{桁数}
をハイフン、スペース、コロンでつないだだけのシンプルな構造です。 - マッチする例:
2023-10-27 15:30:00
- マッチしない例:
2023/10/27 15:30
10. カッコとその中身を抽出
「
と」
に囲まれた部分を、カッコ自体も含めて抽出します。
- 正規表現:
「[^」]+」
- 解説:
[^」]+
は「閉じカッコ以外の文字が1回以上続く」という意味です。これにより、最も内側のカッコのペアではなく、正しく対応するカッコを捉えられます。()
や【】
の場合は\([^)]+\)
や【[^】]+】
のように応用できます。 - 入力例:
彼は「こんにちは」と言った。
- マッチする部分:
「こんにちは」
11. 空白行の削除
- 正規表現:
^\s*$
- 解説:
^
: 行頭\s*
: 空白文字(スペース、タブ、改行など)が0回以上$
: 行末
- 使用法: マッチした行を削除(空文字列に置換)することで、文章中の無駄な空白行をクリーンアップできます。
第5章:AI時代の正規表現生成術!ChatGPTを活用しよう
これまで紹介してきたジェネレーターは非常に強力ですが、さらに時代は進みました。ChatGPTに代表される大規模言語モデル(LLM)の登場により、正規表現の作り方は新たなステージに突入しています。
AIで正規表現を生成するメリット・デメリット
メリット:
* 究極的に簡単: 「〇〇するための正規表現を教えて」と日本語で書くだけ。メタ文字の知識は一切不要です。
* 複雑な要件に対応可能: 「Aで始まり、Bで終わるが、途中にCは含まない」といった複雑なロジックも、文章で説明すれば理解してくれます。
* 対話による改善: 一度生成されたものに対して、「このケースも考慮して」「もっとシンプルにして」といったフィードバックを与えることで、より精度の高い正規表現にブラッシュアップできます。
デメリット:
* 間違うことがある(ハルシネーション): AIは時々、もっともらしい嘘をつきます。一見正しそうに見えても、エッジケース(稀なパターン)を考慮していなかったり、全く機能しない正規表現を生成したりすることがあります。
* 意図の正確な伝達が必要: 曖昧な指示を出すと、意図しない正規表現が返ってきます。後述する「良いプロンプト」の書き方が重要になります。
* セキュリティリスク: 機密情報や個人情報を含むテストデータをプロンプトに含めてはいけません。
結論として、AIは「下書き」を作るのに最適であり、生成された正規表現は必ずRegex101などのツールで「検証」するというワークフローが最強です。
実践!ChatGPTを使った正規表現生成
良い正規表現をAIに作らせるには、良い指示(プロンプト)が必要です。以下のコツを意識してください。
プロンプトの書き方のコツ
- 具体的な要件を箇条書きで示す: 「電話番号の正規表現」ではなく、「日本の固定電話番号で、市外局番は2〜5桁…」のように、条件を明確にリストアップします。
- マッチさせたい例(Positive Example)を提示する: 「
03-1234-5678
にはマッチしてほしい」 - マッチさせたくない例(Negative Example)を提示する: 「
090-1234-5678
(携帯電話)にはマッチしてほしくない」 - 使用する環境(Flavor)を指定する: 「Pythonで使える正規表現でお願いします」
- 解説を求める: 「生成した正規表現の各部分が何を意味するのか、詳しく解説してください」
ケーススタディ:複雑な要件の正規表現を生成する
課題:
YouTubeの動画IDをURLから抽出したい。ただし、YouTubeのURLには youtube.com/watch?v=
や youtu.be/
など複数の形式がある。
悪いプロンプト例:
YouTubeのIDを抜く正規表現教えて。
これでは、どのURL形式を想定しているのか分からず、不完全なものが返ってくる可能性が高いです。
良いプロンプト例:
以下の条件を満たす、YouTubeの動画IDを抽出するための正規表現を、JavaScript (ECMAScript) 互換で作成してください。
また、正規表現の解説と、JavaScriptでの使用例も示してください。# 目的
様々な形式のYouTube URLから、11文字の動画ID部分のみを抽出したい。# マッチさせたいURLの例と、抽出したいID
–https://www.youtube.com/watch?v=dQw4w9WgXcQ
->dQw4w9WgXcQ
–https://youtu.be/dQw4w9WgXcQ
->dQw4w9WgXcQ
–https://www.youtube.com/embed/dQw4w9WgXcQ
->dQw4w9WgXcQ
–https://m.youtube.com/watch?v=dQw4w9WgXcQ&feature=share
->dQw4w9WgXcQ
# マッチさせたくない例
–https://www.youtube.com/channel/UC...
(チャンネルURL)
–https://vimeo.com/12345678
(他の動画サイト)
このように詳細なプロンプトを入力すると、ChatGPTは以下のような質の高い回答を生成してくれる可能性が非常に高くなります。
(ChatGPTの回答例)
はい、承知いたしました。ご提示の条件に基づき、YouTubeの動画IDを抽出するためのJavaScript互換の正規表現を作成します。
正規表現:
(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:watch\?v=|embed\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})
解説:
*(?:https?:\/\/)?
:http://
またはhttps://
があってもなくても良い、という部分です。(?:...)
はキャプチャしないグループです。
*(?:www\.)?
:www.
があってもなくても良い、という部分です。
*(?:youtube\.com\/(?:watch\?v=|embed\/)|youtu\.be\/)
:
*youtube.com/
の後にwatch?v=
またはembed/
が続くパターン
* または (|
)
*youtu.be/
が続くパターン
*([a-zA-Z0-9_-]{11})
: ここが最も重要です。英数字、アンダースコア、ハイフンから成る11文字の文字列をキャプチャグループとして捉えます。この部分が動画IDに相当します。JavaScriptでの使用例:
“`javascript
function getYouTubeId(url) {
const regex = /(?:https?:\/\/)?(?:www.)?(?:youtube.com\/(?:watch\?v=|embed\/)|youtu.be\/)([a-zA-Z0-9_-]{11})/;
const match = url.match(regex);
return match ? match[1] : null;
}// テスト
const urls = [
‘https://www.youtube.com/watch?v=dQw4w9WgXcQ’,
‘https://youtu.be/dQw4w9WgXcQ’,
‘https://www.youtube.com/embed/dQw4w9WgXcQ’,
‘https://m.youtube.com/watch?v=dQw4w9WgXcQ&feature=share’
];urls.forEach(url => {
console.log(${url} -> ${getYouTubeId(url)}
);
});
“`
この回答をそのままRegex101に持ち込んで、Flavor
をECMAScript
にして検証すれば、完璧なワークフローの完成です。
まとめ
正規表現は、一見すると難解な暗号のようです。しかし、その本質は「文字列のパターンを記述する言語」であり、使いこなせばテキスト処理の生産性を劇的に向上させる強力なツールです。
かつては専門家だけが扱える領域でしたが、今は違います。
- Regex101のような高機能なオンラインジェネレーターを使えば、リアルタイムで試行錯誤しながら、正規表現の仕組みを学び、目的のパターンを正確に作成できます。
- iHateRegexのような逆引きツールを使えば、よく使われるパターンを瞬時に見つけてコピペできます。
- そして、ChatGPTのようなAIを使えば、複雑な要件を自然言語で伝えるだけで、精度の高い正規表現の下書きを瞬時に入手できます。
もはや、正規表現のメタ文字をすべて暗記する必要はありません。大切なのは、「どのような課題を正規表現で解決できるか」を理解し、「適切なツールを選んで活用する」スキルです。
この記事で紹介したツールとテクニックは、あなたが正規表現アレルギーを克服し、日々の業務を効率化するための確かな武器となるはずです。もう正規表現は怖くない。さあ、ジェネレーターを開いて、あなたの目の前にある退屈なテキスト処理作業を、魔法のように一瞬で片付けてしまいましょう!