【问题标题】:Regexp to match domain and subdomains (in Java)正则表达式匹配域和子域(在 Java 中)
【发布时间】:2011-05-04 21:00:18
【问题描述】:

我需要验证给定的 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/

【问题讨论】:

    标签: java regex url


    【解决方案1】:
    ^https?://[^/@]*\.domain\.com(/.*)?$
    

    (not-/ 阻止.domain.com 出现在路径中,not-@ 阻止username:password@ 滥用。)

    不过,更好的是:使用 Java 内置的 URL 类来正确解析 URL。然后,您可以阅读 host 属性并检查 endsWith 您的域。

    【讨论】:

    • 原始的“伪掩码”模式也没有。 :-) 当然,如果你想要的话,你可以在前面添加一个([^/@]*\.)? 组。使用URL,您必须检查url.getHost().equals("domain.com") || url.getHost().endsWith(".domain.com")
    【解决方案2】:

    试试这个:

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

    [^.]+\. 表示一个或多个非点字符,后跟一个点;一种快速而肮脏的方式来匹配域名组件及其尾随点。我不会用它来find 大量文本中的域名,但它对于你正在做的那种验证来说已经足够了。将它放在一个组中并添加 * 量词以获得匹配零个或多个组件的正则表达式。

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

    【讨论】:

      【解决方案3】:

      你可以使用

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

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

      因为你不想要'.'在“domain.com”之后

      你可以使用

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

      并检查它是否为-1

      【讨论】:

      • 非常糟糕的做法,因为这将匹配 evildomain.com
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多