URL マッチングの正規表現 — HTTP、HTTPS、URIパターン

HTTP、HTTPS、一般的なURI形式を含むURLマッチングの正規表現パターン。プロトコル、ドメイン、パス、クエリパラメータ、フラグメントのマッチングをカバー。

Common Patterns

詳細な説明

正規表現によるURLマッチング

URLのマッチングはテキスト処理、リンク抽出、入力検証で頻繁に必要とされます。シンプルなものから包括的なものまでパターンを紹介します。

シンプルなHTTP/HTTPSパターン

https?://[\w.-]+(?:/[\w./?%&=-]*)?

これはオプションのパスとクエリ文字列を持つ基本的なURLをカバーします:

  • https://example.com
  • http://sub.domain.com/path/to/page
  • https://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を検証する場合、またはログファイルを処理してすべての参照先エンドポイントを見つける場合。

試してみる — Regex Cheat Sheet

フルツールを開く