URL マッチングの正規表現 — HTTP、HTTPS、URIパターン
HTTP、HTTPS、一般的なURI形式を含むURLマッチングの正規表現パターン。プロトコル、ドメイン、パス、クエリパラメータ、フラグメントのマッチングをカバー。
Common Patterns
詳細な説明
正規表現によるURLマッチング
URLのマッチングはテキスト処理、リンク抽出、入力検証で頻繁に必要とされます。シンプルなものから包括的なものまでパターンを紹介します。
シンプルなHTTP/HTTPSパターン
https?://[\w.-]+(?:/[\w./?%&=-]*)?
これはオプションのパスとクエリ文字列を持つ基本的なURLをカバーします:
https://example.comhttp://sub.domain.com/path/to/pagehttps://api.example.com/v1/users?page=1&limit=10
トークンの分解
| トークン | 目的 |
|---|---|
https? |
"http" または "https" |
:// |
プロトコルセパレータ |
[\w.-]+ |
ドメイン名(英字、数字、ドット、ハイフン) |
(?:/[\w./?%&=-]*)? |
オプションのパスとクエリ文字列 |
より包括的なパターン
ポート、認証、フラグメントを含むURLの場合:
https?://(?:[\w-]+(?::[\w-]+)?@)?[\w.-]+(?::\d{1,5})?(?:/[\w./?%&=#-]*)?
これは追加で以下にマッチします:
- ポート番号:
https://localhost:3000/api - Basic認証:
https://user:pass@example.com - フラグメント識別子:
https://example.com/page#section
URLコンポーネントの抽出
名前付きキャプチャグループを使って各部分を抽出:
(?<protocol>https?)://(?<domain>[\w.-]+)(?::(?<port>\d+))?(?<path>/[^?#]*)?(?:\?(?<query>[^#]*))?(?:#(?<fragment>.*))?
重要な注意事項
- RFC 3986に準拠するすべてのURLを検証できる正規表現はありません
- JavaScriptではURLコンストラクタ(
new URL(str))を使用して信頼性の高い解析を検討してください - これらのパターンは無効なドメインにもマッチする可能性があります。DNS解決が真の検証です
ユースケース
プレーンテキストからリンクを抽出するツールを構築する場合、フォームでユーザーが送信したURLを検証する場合、またはログファイルを処理してすべての参照先エンドポイントを見つける場合。