2013-05-18 40 views
0

我想從字符串中獲取網址,因此我可以在WebView中顯示網址。只接受字符串中的網址部分

例如字符串:

exp 1- Hello dilip refer this url www.google.com. 
exp 2- hi ramesh this is good for android http://android.com 

我只想www.google.comhttp://android.com哪能他們打出字符串的

+0

將它永遠是在句子的結尾? – FoamyGuy

+0

no !!用戶也可以在url之前和之後輸入文本... – Mahi

+0

你應該在url之後包含一個帶有ext的例子。 – FoamyGuy

回答

0

假設你的字符串是下面你可以使用正則表達式如下提取www.google.com和http://android.com

String s = "Hello dilip refer this url www.google.com. hi ramesh this is good for android http://android.com"; 
Pattern pc = Pattern.compile("((http://)|(www.))[A-Z,a-z]+.com"); 
Matcher matcher = pc.matcher(s); 
while(matcher.find()) 
{ 
    System.out.println("String Extracted "+matcher.group()); 
} 

輸出

String Extracted www.google.com 
String Extracted http://android.com 

注:以上不爲這些類型的網址http://meta.stackoverflow.com,www.google.co.uk和b3ta.com的工作。

編輯:

 String s = "Hello dilip refer www.google.co.uk www.google.co.in this url www.google.com. hi ramesh this is good for android http://android.com hello there meta.stackoverflow.com"; 
     Pattern pc = Pattern.compile("((http://)|(www.))([A-Z,a-z,0-9])+((.com)|(.co.[a-z]{2}))|([A-Z,a-z,0-9].[A-Z,a-z,0-9])+.com"); 
     Matcher matcher = pc.matcher(s); 
     while(matcher.find()) 
     { 
      System.out.println("String Extracted "+matcher.group()); 
     } 

輸出:

 String Extracted www.google.co.uk 
     String Extracted www.google.co.in 
     String Extracted www.google.com 
     String Extracted http://android.com 
     String Extracted meta.stackoverflow.com 

即使上面是不完美的。但如果你可以修改上面的正則表達式它應該可以幫助你

+0

這適用於本示例,但不適用於'http :// meta.stackoverflow.com','www.google.co.uk'和'b3ta.com'。 –

+0

是的,我說在假設答案bcoz。 – Raghunandan

+0

@ KenY-N我編輯了這篇文章,但即使這可能不完美。但我想它涵蓋了幾個例子 – Raghunandan

1

我建議拆分串入所有沒有空格子,和然後選擇包含「。」的那個。嵌入其他角色之間。在普通英語中,「。」只會在網址中出現。

2

如果你只是想從一個字符串中檢索URL,我會建議只需在stackoverflow上尋找一個問題。

像這樣:

public static final String URL_REGEX = "^((https?|ftp)://|(www|ftp)\\.)?[a-z0-9-]+(\\.[a- z0-9-]+)+([/?].*)?$"; 

Pattern p = Pattern.compile(URL_REGEX); 
Matcher m = p.matcher("example.com");//replace with string to compare 
if(m.find()) { 
System.out.println("String contains URL"); 
} 

從這個帖子:https://stackoverflow.com/a/11007981/1164919 你會發現如何做到這一點在同一個線程更多的片段和建議。

但是如果你想自己做,理解它是如何工作的。您也可以製作自己的簡單代碼段來檢測字符串中是否存在URL。 你也可以使用,if(String.Contains("something"))。如果您的輸入存在於字符串中,這將簡單地返回true或false。

有幾十個例子等着你讀。 搜索的東西,如:regex,或者是硬,String.split

1

這裏有一個可能的解決方案。下面的正則表達式假定它在一個字母后跟一個句點時發現了一個URL,並且一個字母緊跟着那個句點。下面是什麼,它將匹配一些例子:

t.t 
hello.aspx 
www.google.com 
http://android.com 
http://android.com/test/test.aspx 
https://www.stackoverflow.com/questions.html?type=android 
www.google.com/android/games.aspx#hello 

這裏是正則表達式(與IGNORECASE選項結合使用):

(https?://)?[-A-Z0-9]+\.[-A-Z0-9.]+(/[-A-Z0-9+&@#/%=~_|!:,.;?]*)? 

運行它針對您的示例文本同時返回你想要的網址。

這裏使用這個表達式一些樣本Java代碼:

String testInputString = "Test 1 www.google.co.uk Test 2 www.google.co.in Test 3 www.google.com Test 4 http://android.com Test 5 meta.stackoverflow.com"; 
Pattern p = Pattern.compile("(https?://)?[-A-Z0-9]+\\.[-A-Z0-9.]+(/[-A-Z0-9+&@#/%=~_|!:,.;?]*)?", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); 
Matcher m = p.matcher(testInputString); 
while (m.find()) { 
    System.out.println(m.group(0)); 
} 
+0

你錯過了一個轉義字符(https?://)?[-A-Z0-9] \\。[-A-Z0-9。] +(/ [-A- Z0-9 +&@#/%=〜_ |!:,。;?] *)?「。但是我試過了正則表達式不適合我。字符串和我的答案一樣。我嘗試了正則表達式字符串din't工作 – Raghunandan

+0

@Raghunandan - 正則表達式在我的答案是真正的原始的,並沒有預先逃脫。我覺得最好不要轉義字符,當正則表達式沒有在一個示例代碼塊中呈現時,我重新測試了表達式(https?://)?[ - [ - ]是否使用「不區分大小寫」選項,您可以使用下面的正則表達式: A-ZA-Z0-9] + \ [ - A-ZA-Z0-9] +(/ [ - A-ZA-Z0-9 + @#/%=〜_ |:。,;!? ] *)? –

+0

上面的正則表達式給了我非法的轉義字符,我在android和java上測試它,如果我轉義非法字符,正則表達式與我的答案中的字符串不匹配。不適用於「您好dilip請參閱www.google.co.uk www.google.co.in此網址www.google.com。您好ramesh這是很好的Android的http://android.com你好有meta.stackoverflow.com「; – Raghunandan