特定のウェブサイトのドメインとサブドメイン、パスを示す正規表現
やりたいこと (例)
- Proton 系の以下ウェブサイトを正規表現で全て指定したい。
calendar.proton.me
drive.proton.me
mail.proton.me
pass.proton.me
proton.me
protonvpn.me
wallet.proton.me
- ブラウザの設定になるので http または https 接続が前提
- 関係の無いドメイン (hogefugaproton.me とか) は除去したい。
できた正規表現
^((.*\.)?|https?:\/\/)proton(vpn)?\.me(\/.*)?$
使っているメタ文字の解説
^
は行頭、$
は行末を示す。つまり、この前後に文字列がある場合はマッチしない。
\
は直後のメタ文字などを通常の文字列としてエスケープする。
(内容)
は囲まれている 内容
部分をまとめて処理する。
|
はその前後のパターンいずれか (OR) を示す。
?
は直前の文字が 0 回または 1 回登場することを示す。
.
は任意の 1 文字分にマッチする。
*
は直前の文字が 0 回またはそれ以上 (無制限) に登場することを示す。
分解して解説
行頭・行末は省く。
((.*\.)?)|https?:\/\/)
1. - サブドメインの指定部分です。
.*
は、任意の文字が任意の回数続くことを示す。- 今後サブドメインが増えたり、全体が把握できずとも問題ない形。
\.
は、文字列の.
を示す。- これによってサブドメインの形であることを強制している。
- これが無い場合、
hogefugaproton.me
などもマッチすることになる。 - これによって第三者の無関係なドメインにマッチするのを回避できる。
|
によって、以下のパターンと以上のパターンのいずれかにマッチする。https?
はhttp
またはhttps
のいずれかにマッチする。:\/\/
は文字列の://
を示す。- つまり、
http://
またはhttps://
を示す。
- つまり、
proton(vpn)?\.me
2. - ドメイン名を示す部分です。
proton(vpn)?
はproton
またはprotonvpn
を示す。- ドメイン名が 2 パターンあるためこのように指定。
\.me
は文字列の.me
を示す。
(\/.*)?
3. - パスを示す部分です。
\/
は文字の/
を示す。.*
は任意の 0 文字以上の文字列を示す。()?
で囲まれているので、0-1 回の登場にマッチする。