2010-06-08 82 views

回答

8

像這樣:

String baseUrl; 
Pattern p = Pattern.compile("^(([a-zA-Z]+://)?[a-zA-Z0-9.-]+\\.[a-zA-Z]+(:\d+)?/"); 
Matcher m = p.matcher(str); 
if (m.matches()) 
    baseUrl = m.group(1); 

但是,你應該使用URI class代替,就像這樣:

URI uri = new URI(str); 
+0

感謝您的快速反應 但它給 https://開頭www.abc.com sadfl 是否有可能它只給出第一個https://www.abc.com – Sunil 2010-06-08 14:38:10

+0

非常感謝您先生這對於URI類正在工作 – Sunil 2010-06-08 14:41:10

+0

+1。 – Aistina 2010-06-08 14:44:53

1

/^(https?\:\/\/[^\/]+).*/$1/

這將捕獲任何以http開頭和$ 1進行包含一切從開始到第一/後//

+0

感謝您的快速性反應 – Sunil 2010-06-08 14:39:11

1

除了寫和扔掉的腳本,你應該總是從解析近三成複雜的語法(電子郵件地址,網址,html頁面等)使用正則表達式。

相信我,你最終被咬傷。

+0

感謝您的意見 – Sunil 2010-06-08 14:43:45

0

我敢肯定有一個Java類,將允許路徑的操作,但如果它必須是一個正則表達式,

https?://[^/]+ 

會工作。 (s?包括也處理https:

+0

感謝您的迴應sir – Sunil 2010-06-08 14:44:19

0

看起來像你的兩個具體的例子是最簡單的解決辦法是模式:

[^/]_//[^/]+ 

即:非斜線(0次或更多次),雙斜槓,非-slash(0或更多次)。如果你願意,你可以比這更嚴格,因爲現有的兩個答案是以不同的方式進行的 - 一個會拒絕例如另一個會拒絕帶有下劃線的網域(但接受不帶前導protocol://的網址,因此在這方面甚至比我的廣泛)。各種答案(所有正確的關於你的不足規格;-)應該向你建議你的規格太模糊,應該收緊。

+0

感謝您的快速回復sir – Sunil 2010-06-08 14:43:00

0

這是一個正則表達式,應該滿足給定的問題。

https?://[^/]* 

我假設你問這部分是爲了獲得更多正則表達式的知識。但是,如果你想從一個URL拉主機,它可以說是更正確的使用Java的更強大的解析方法:

String urlStr = "https://www.abc.com/stuff"; 
URL url = new URL(urlStr); 
String host = url.getHost(); 
String protocol = url.getProtocol(); 
URL baseUrl = new URL (protocol, host); 

這是更好,因爲它應該,如果你輸入網址捕到更多的情況下,並不像上面所描述的那樣嚴格。

+0

感謝您的快速回答sir – Sunil 2010-06-08 14:42:11

2

一個一個無襯正則表達式:

String baseUrl = url.substring(0, url.indexOf('/', url.indexOf("//")+2)); 
+0

:) 感謝您的回答但我想使用正則表達式 – Sunil 2010-06-08 14:45:43