正規表現|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属性を指定し、ブラウザは表示の際にその要素の位置までスクロールする(アンカー)。