正则表达式仅匹配域并忽略url中的子域

时间:2017-05-22 05:37:41

标签: regex

使用Java和java.net.URI,我想只匹配URL的域部分而忽略任何子域。

    URI uri = new URI(url);
    String domain = uri.getHost();

然后使用域的值来匹配以下正则表达式:

((-{1})?\w)+\.((co\.uk)|(com\.au)|com|net|ch)

change.com - >这匹配正确

subdomain1.change.com - >不正确,因为“subdomain1.ch”与第一个匹配

我没有成功正确编写正确解析URL的正则表达式,只能获得上述TLD所需的内容(co.uk,com.au,com,net和ch)。即使需要添加额外的TLD,正则表达式也应该匹配它。

此外,即使存在多个子域,我也希望正则表达式与URL匹配。

sub-domain1.subdomain2.sub-domain3.change.com

我希望正则表达式只匹配 change.com

我怎样才能忽视所有时期“。”在我匹配上面列出的任何顶级域名后,网址字符串中的字符?感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用以下否定前瞻组补充您的正则表达式:(?!\w)

因此,如果下一个字符是单词char,则主正则表达式将不匹配。

答案 1 :(得分:1)

您的用例公式:

\w+\.\w{2,3}$

Demo

或者如果你想要你的模式 - 只需将$附加到正则表达式的末尾