正規表現入門:パターンで文字列を操る基本
・対象: 初学者,Web エンジニア・タグ: tool:regex-tester, regex, validation
ログ抽出・入力チェック・置換…**正規表現(Regular Expression)**はテキスト処理の万能ナイフです。 ここでは最低限のルールと、実務でよく使うパターンを紹介します。
1. 導入:よくある悩み・初心者の疑問
.と*の意味が混ざる- 期待外の場所まで一致してしまう
2. 基本の構造(定義とメタ文字)
文字列の「パターン」を記述し、それに一致する部分を検索/抽出/置換するための表現方法です。
例:/\d+/ は 1 桁以上の数字に一致します。
3. 仕組み・構造:メタ文字とエスケープ
- 代表的メタ文字:
.任意 1 文字,*0 回以上,+1 回以上,?0/1 回,[]文字クラス,()グループ,|OR - アンカー:
^行頭,$行末 - フラグ:
i大文字小文字無視,g全体検索,m複数行,sドット改行許可 - エスケープ: メタ文字自身を検索するには
\.のようにバックスラッシュ
4. よくあるつまずき/勘違い
- 貪欲(greedy)な
.*が取り過ぎる →.*?の最短一致を検討 - マッチ範囲が広がる → アンカー
^$や境界\bを利用 - 改行に
.が一致しない → フラグsを検討
5. 実例:よくあるパターン
- メール:
^[\w.+-]+@[\w.-]+\.[A-Za-z]{2,}$ - URL(簡易):
^https?://[\w.-]+(?:/[\w./-]*)?$ - 日付(YYYY-MM-DD):
^\d{4}-\d{2}-\d{2}$ - 数字のみ:
^\d+$
注意: これらは簡易版です。実運用では要件に応じて厳密化してください。
6. セキュリティ・運用上の注意
- ReDoS(正規表現 DoS)に注意:複雑なバックトラッキングを避ける
- ユーザー入力は必ずタイムアウトや長さ制限を設ける
7. 手を動かす:関連ツール /tools/regex-tester の紹介
- /tools/regex-tester にアクセス
- パターン・フラグ・テキストを入力して一致を確認
mark表示で一致部分を視覚的に把握、キャプチャも配列で確認
8. 3 分クイズ
- 最短一致の書き方は? →
*?+? - 行頭/行末に一致させるには? →
^$ - 改行も
.に含めるには? → フラグs
クイズ(3問)
\bは何の境界? → 単語境界- 取り過ぎを防ぐには? → 最短一致や具体的な文字クラス
- ReDoS 対策は? → タイムアウト/長さ制限/パターン簡素化
9. 関連リンク
- MDN 正規表現: https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_expressions
- 正規表現の安全性(ReDoS): https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
関連ツール: /tools/regex-tester