正则表达式匹配域和子域(在Java中)

时间:2010-11-04 04:05:19

标签: java regex url

我需要验证给定的网址是否与我的域名掩码匹配。

示例:我想只允许满足此“伪掩码”的域:

https://*.domain.com
http://*.domain.com

所以下一个领域是好的:

http://my.domain.com/something/blah.html
https://www.domain.com/
http://domain.com/go/somewhere.html
https://very.weird.domain.com/index.jsp

但下一个域名不是好的:

https://domain.com.google.com/other.html
http://my.domainfake.com/haha.jsp
https://my.fakedomain.com/

3 个答案:

答案 0 :(得分:1)

^https?://[^/@]*\.domain\.com(/.*)?$

(不是 - /阻止.domain.com出现在路径中,不是 - @停止用户名:密码@滥用。)

但更好:使用Java内置的URL类来正确解析URL。然后,您只需阅读host媒体资源并检查其endsWith您的域名。

答案 1 :(得分:1)

试试这个:

^https?://(?:[^./@]+\.)*domain\.com(?![^/])

[^.]+\.表示一个或多个非点字符,后跟一个点;一种快速而又脏的方法来匹配域名组件及其尾随点。我不会用它来在更大的文本中找到域名,但它足以让你正在进行验证。将其放在一个组中并添加*量词,以获得与零个或多个组件匹配的正则表达式。

你并不关心域名之后的内容,但你必须确保你已经到了最后;例如,您不希望匹配http://domain.company.com。正则表达式的最后一部分(?![^/])是一个负向前瞻,这意味着如果此后有另一个字符,并且该字符不是/,则失败

答案 2 :(得分:-1)

你可以使用

"http://a.domain.com".indexOf("domain.com") 

如果请求的字符串不在文本中,则返回-1。

因为你不能'。'在'domain.com'之后

你可以使用

"http://a.domain.com".indexOf("domain.com.")

并检查它是否为-1