正規表現|URLをテキストから検索する
| 概要 | 正規表現 |
|---|---|
| URL全体 (scheme ~ fragment) | https?://[a-zA-Z0-9-._~:/?#\[\]@!$&'()*+,;=%]+例:https://user:pass@host.com:8080/path/path.html?query=1&query=val#fragment 例:http://host.com/path/?query=1&query=val#fragment |
| URLスキーム~クエリ (scheme ~ query) | https?://[a-zA-Z0-9-._~:/?\[\]@!$&'()*+,;=%]+例:https://user:pass@host.com:8080/path/path.html?query=1&query=val 例:http://host.com/path/?query=1&query=val |
| URLスキーム~パス (scheme ~ path) | https?://[a-zA-Z0-9-._~:/\[\]@!$&'()*+,;=%]+例:https://user:pass@host.com:8080/path/path.html 例:http://host.com/path/ |
| URLスキーム~ポート (scheme ~ port) | https?://([a-zA-Z0-9-._%:]*@)?[a-zA-Z0-9-.]+(:[0-9]+)?例:https://user:pass@host.com:8080 例:http://host.com |
| URLスキーム~ホスト (scheme ~ host) | https?://([a-zA-Z0-9-._%:]*@)?[a-zA-Z0-9-.]+例:https://user:pass@host.com 例:http://host.com |
| URLスキーム~ユーザー情報 (scheme ~ userinfo) | https?://([a-zA-Z0-9-._%:]*@)?例:https://user:pass@ 例:http:// |
任意のテキストからURLを検索(一致)する正規表現です。URL全体のほかスキーム~クエリまで、パスまで、ホストまでなど特定構文までの一致もできます。
Readme
- 先読み、後読み、\w不使用なので、たいていの正規表現エンジンで同じように動くと思います。
- この正規表現はURLのフォーマットを厳密にチェックするものではありません。一般的にこのくらいでURLとして扱うだろうくらいのものです。
http / https以外のスキーム
上記の正規表現はhttp(s)スキームのみ一致します。http(s)以外のスキームも一致させたい場合はhttps?の部分を(https?|ftp|mailto|telnet|file)など任意に置き換えてご利用ください。
URLで使用できる文字
本稿ではRFC 3986で定められた予約文字、非予約文字および%(パーセントエンコーディング対応)を対象としています。
予約文字 (Reserved Characters)
:, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =
非予約文字 (Unreserved Characters)
半角英数字 (a-z, A-Z, 0-9), -, ., _, ~
※ホストは_, ~の使用不可。
URLの構成・構文
scheme://userinfo@host:port/path?query#fragment
scheme(スキーム)
通信手段を示す情報で省略不可。基本的には通信プロトコルと同じ名称だが、スキーム=プロトコルとは限らずアプリ名などを使用するケースも多い。
userinfo(ユーザー情報)
アクセスに使うユーザー名とパスワード。//からuserinfo、host、portまでを合わせてauthority(権限)と呼ぶ。
host(ホスト)
アクセス先サーバーを示す情報。FQDNやIPアドレスなど。ドメインと言った場合はサブドメインを含まないため異なる。
port(ポート)
:から始まるアクセス先サーバーのポート番号。
path(パス)
/から始まるホスト内のアクセス先。http(s)の場合はディレクトリ名とファイル名にあたる。
query(クエリ)
?から始まり#または末尾で終わる。明確な構文はないがhttp(s)の場合はGET通信時のパラメータとしてkey=value形式を&区切りで指定する。
fragment(フラグメント)
#から始まる。明確な構文はないがHTMLドキュメントの場合は要素のid属性を指定し、ブラウザは表示の際にその要素の位置までスクロールする(アンカー)。