【正規表現】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://

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

矢野ヒロタ / 1987年生まれ。プログラマー。
趣味で作ったWebツールを公開しています。無料ですのでご自由にお使いください。ブログは技術ネタと見せかけてもっぱら妄想です。よしなに。
© HIROTA YANO