正则表达式将 url 与特定域正确匹配,如果添加了子域

Regex to properly match urls with a particular domain and also if there is a subdomain added

我有以下正则表达式:

(^|^[^:]+:\/\/|[^\.]+\.)hello\.net

这似乎适用于大多数情况,例如:

http://hello.net
https://hello.net
http://www.hello.net
https://www.hello.net
http://domain.hello.net
https://solutions.hello.net
hello.net
www.hello.net

然而它仍然匹配它不应该的:

hello.net.domain.com

你可以在这里看到: https://regex101.com/r/fBH112/1

我主要是想检查 url 是否是 hello.net 的一部分。所以 hello.netsub.hello.net 等任何子域都应该匹配。 它也应该匹配 hello.net/bye。所以 hello.net 之后的任何内容都无关紧要。

您可以通过在末尾添加 (?:\/.*)?$ 来修复您的模式:

(^|^[^:]+:\/\/|[^.]+\.)hello\.net(?:\/.*)?$

regex demo(?:\/.*)?$ 匹配一个可选序列 / 和任何 0 个或多个字符,然后是字符串的结尾。

您可以考虑 "cleaner" 模式,例如

^(?:\w+:\/\/)?(?:[^\/.]+\.)?hello\.net(?:\/.*)?$

regex demo。详情:

  • ^ - 字符串开头
  • (?:\w+:\/\/)? - 可选出现 1+ 个单词字符,然后是 :// char sqequence
  • (?:[^\/.]+\.)? - 除了 /. 之外的任意 1 个或多个字符的可选出现,然后是 .
  • hello\.net - hello.net
  • (?:\/.*)?$ - / 的可选出现,然后是任何 0+ 个字符,然后是字符串结尾