1. 正規表現の基礎
正規表現(Regular Expression、Regex)は、文字列パターンを定義して検索・抽出・置換する強力なツールです。文字どおりにマッチ(\dは数字、\wは単語文字)させたり、特殊文字で複雑なパターンを表現したりします。例:^[a-z]+$は小文字だけを含む文字列を意味します。^は先頭、$は末尾、[a-z]はaからz、+は1個以上を表します。ほぼすべてのプログラミング言語やテキストエディタでサポートされており、入力検証、データ解析、テキスト置換に欠かせません。
正規表現パターンをリアルタイムでテストし、マッチ結果を確認します。フラグ設定、グループキャプチャ、よく使うパターンライブラリを提供します。
正規表現(Regular Expression、Regex)は、文字列パターンを定義して検索・抽出・置換する強力なツールです。文字どおりにマッチ(\dは数字、\wは単語文字)させたり、特殊文字で複雑なパターンを表現したりします。例:^[a-z]+$は小文字だけを含む文字列を意味します。^は先頭、$は末尾、[a-z]はaからz、+は1個以上を表します。ほぼすべてのプログラミング言語やテキストエディタでサポートされており、入力検証、データ解析、テキスト置換に欠かせません。
実務で頻繁に使われる正規表現パターンです。メール:^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$、電話番号(米国):^(\+1)?[-.\s]?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}$、URL:^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b、日付(YYYY-MM-DD):^\d{4}-\d{2}-\d{2}$、パスワード(最低8文字、大文字+小文字+数字+特殊文字):^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$。これらのパターンをベースに、プロジェクトに合わせて修正して使ってください。
正規表現のフラグは検索動作を制御します。g(global):最初のマッチだけでなく、すべてのマッチを探します。i(ignoreCase):大文字小文字を区別しません(/hello/iはHello、HELLOのどちらにもマッチ)。m(multiline):^と$が各行の先頭/末尾にマッチします。s(dotAll):.が改行文字(\n)にもマッチします。u(unicode):Unicode全体を正しく処理します(絵文字など)。y(sticky):lastIndexの位置からのみ検索を開始します。例:/hello/giは大文字小文字を無視してすべてのhelloを探します。
括弧()でグループを作ると、マッチした部分をキャプチャして後で利用できます。例:/(\d{4})-(\d{2})-(\d{2})/では$1が年、$2が月、$3が日です。JavaScriptのmatch()の結果配列にキャプチャグループが含まれます。後方参照\1、\2は直前のグループと同じテキストにマッチします。例:/(\w+)\s+\1/は「hello hello」にマッチします。非キャプチャグループ(?:)はグループ化はしますがキャプチャしないため、パフォーマンスが向上します。
先読み(lookahead)と後読み(lookbehind)は、特定のパターンの前後を確認しますが、マッチには含めません。肯定先読み(?=):/\d(?=px)/はpxの前の数字だけにマッチします(「100px」の100)。否定先読み(?!):/\d(?!px)/はpxの前ではない数字にマッチします。肯定後読み(?<=):/(?<=\$)\d+/は$の後の数字だけにマッチします(「$100」の100)。否定後読み(?<!):その逆です。パスワード検証で特定の文字が含まれているかの確認によく使われます。
複雑な正規表現はパフォーマンスの問題を引き起こすことがあります。できるだけ具体的に書きましょう(.*よりも[a-z]+)。不要なキャプチャグループは非キャプチャグループ(?:)に置き換えてください。バックトラッキングを減らすため、貪欲な量指定子(*,+)の代わりに控えめな量指定子(*?,+?)を使います。大きなテキストでは、正規表現より文字列メソッド(indexOf、startsWith)のほうが速いことがあります。正規表現は事前にコンパイルして再利用してください(new RegExpを繰り返し生成しないこと)。ReDoS(Regular Expression Denial of Service)攻撃に注意し、ユーザー入力をそのまま正規表現パターンとして使わないでください。