我想從字符串中獲取網址,因此我可以在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.com
和http://android.com
哪能他們打出字符串的
我想從字符串中獲取網址,因此我可以在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.com
和http://android.com
哪能他們打出字符串的
假設你的字符串是下面你可以使用正則表達式如下提取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
即使上面是不完美的。但如果你可以修改上面的正則表達式它應該可以幫助你
這適用於本示例,但不適用於'http :// meta.stackoverflow.com','www.google.co.uk'和'b3ta.com'。 –
是的,我說在假設答案bcoz。 – Raghunandan
@ KenY-N我編輯了這篇文章,但即使這可能不完美。但我想它涵蓋了幾個例子 – Raghunandan
我建議拆分串入所有沒有空格子,和然後選擇包含「。」的那個。嵌入其他角色之間。在普通英語中,「。」只會在網址中出現。
如果你只是想從一個字符串中檢索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
等
這裏有一個可能的解決方案。下面的正則表達式假定它在一個字母后跟一個句點時發現了一個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));
}
你錯過了一個轉義字符(https?://)?[-A-Z0-9] \\。[-A-Z0-9。] +(/ [-A- Z0-9 +&@#/%=〜_ |!:,。;?] *)?「。但是我試過了正則表達式不適合我。字符串和我的答案一樣。我嘗試了正則表達式字符串din't工作 – Raghunandan
@Raghunandan - 正則表達式在我的答案是真正的原始的,並沒有預先逃脫。我覺得最好不要轉義字符,當正則表達式沒有在一個示例代碼塊中呈現時,我重新測試了表達式(https?://)?[ - [ - ]是否使用「不區分大小寫」選項,您可以使用下面的正則表達式: A-ZA-Z0-9] + \ [ - A-ZA-Z0-9] +(/ [ - A-ZA-Z0-9 + @#/%=〜_ |:。,;!? ] *)? –
上面的正則表達式給了我非法的轉義字符,我在android和java上測試它,如果我轉義非法字符,正則表達式與我的答案中的字符串不匹配。不適用於「您好dilip請參閱www.google.co.uk www.google.co.in此網址www.google.com。您好ramesh這是很好的Android的http://android.com你好有meta.stackoverflow.com「; – Raghunandan
將它永遠是在句子的結尾? – FoamyGuy
no !!用戶也可以在url之前和之後輸入文本... – Mahi
你應該在url之後包含一個帶有ext的例子。 – FoamyGuy