我是 Java 的初学者,我一直在尝试找出与以下内容匹配的正则表达式:
- 仅主机而不是 IP
- 主机也可能带有 http 或 https 标签。
- 主机可以有不同的 TLD。
我试过[a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+
了,但我没有得到我所期望的。如果有人可以帮助我,那就太好了。
public static void main(String[] args) {
Pattern pattern = Pattern.compile ("(?:https?://)?(?:[-a-zA-Z0-9_]+\\.)*[-a-zA-Z0-9_]*[-a-zA-Z_][-a-zA-Z0-9_]*(?:\\.[-a-zA-Z0-9_]+)*");
System.out.println(pattern.matcher("127.0.0.1").matches()); // false
System.out.println(pattern.matcher("1.0.0.127.in-addr.arpa").matches()); // true
System.out.println(pattern.matcher("localhost").matches()); // true
System.out.println(pattern.matcher("1-2-3-4").matches()); // true
System.out.println(pattern.matcher("http://1.0.0.127").matches()); // false
System.out.println(pattern.matcher("https://1.0.0.127").matches()); // false
System.out.println(pattern.matcher("ftp://1.0.0.127.in-addr.arpa").matches()); // false
System.out.println(pattern.matcher("http://1.0.0.127.in-addr.arpa").matches()); // true
System.out.println(pattern.matcher("https://1.0.0.127.in-addr.arpa").matches()); // true
不确定您要完成什么。您需要主机部分,但只需要已解析的部分,即不允许使用 IP 地址。为什么你总是想要它?那么可选的端口号呢?那么可能的登录信息呢?如果您想对解析的数据做任何严肃的事情,我的建议是使用java.net.URL
(或)对象。URI
如果您只想玩正则表达式,请更好地指定您的要求,因为根据输入文本,可能没有正则表达式就足够了。考虑以下输入:
Lorem ipsum.Dolor sit amen
应该ipsum.Dolor
被接受为有效的主机吗?它没有http://
协议规范,也不是 IP 地址,因此根据您的要求,它应该匹配。