我初學Java和我一直在試圖找出符合以下正則表達式:正則表達式來匹配有或沒有http和https的主機;
- 主機,而不是一個IP
- 主機可能與HTTP或HTTPS標籤以及。
- 主持人可以有不同的頂級域名。
我試過[a-z0-9]+|([a-z0-9]+[-]+[a-z0-9]+))[.])+
但我沒有得到我的預期。 如果有人能幫助我,這將是非常好的。
我初學Java和我一直在試圖找出符合以下正則表達式:正則表達式來匹配有或沒有http和https的主機;
我試過[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
匹配'-test.com',我猜是不需要的。 – 2013-03-07 12:22:20
非常感謝..這是我期待的完美的東西。 – user2144099 2013-03-07 12:22:55
在我的情況下,用undercope的主機也應該匹配。這可以輕微修改以接受內鏡。 – user2144099 2013-03-12 06:19:33
不知道你在努力完成什麼。你想要的主機部分,但只有一個解決的,即IP地址是不允許的。你爲什麼要這樣做?那麼可選的端口號呢?那麼可能的登錄信息呢?我的建議是使用java.net.URL
(或URI
)對象,如果你想對解析的數據做任何嚴肅的事情。
如果您只想玩正則表達式,請更好地指定您的要求,因爲根據輸入的文本,沒有正則表達式可能就足夠了。考慮以下輸入:
Lorem ipsum.Dolor sit amen
應該將ipsum.Dolor
作爲有效主機接受嗎?它沒有http://
協議規範,也不是IP地址,因此根據您的要求它應該匹配。
請提供一些規格,以及應該匹配什麼和應該不匹配的例子。 – 2013-03-07 12:20:37