1
Pattern.compile("((http\\://|https\\://|ftp\\://|sftp\\://)|(www.))+((\\S+):(\\S+)@)?+(([a-zA-Z0-9\\.-]+\\.[a-zA-Z]{2,4})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(/[a-zA-Z0-9%:/-_\\?\\.'~]*)?");

我有这种模式,我想测试我的字符串中是否有链接。我想将这些文本链接到TextView.

&当链接包含字符时,代码不起作用。

完整代码:

Pattern httpMatcher = Pattern.compile("((http\\://|https\\://|ftp\\://|sftp\\://)|(www.))+((\\S+):(\\S+)@)?+(([a-zA-Z0-9\\.-]+\\.[a-zA-Z]{2,4})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(/[a-zA-Z0-9%:/-_\\?\\.'~]*)?");
String httpViewURL  = "myhttp://"; 
Linkify.addLinks(label, httpMatcher, httpViewURL);
4

3 回答 3

5

我认为这比使用正则表达式更干净:

boolean isLink(String s) {
  try {
     new URL(s);
     return true;
  } catch (MalformedURLException e) {
     return false;
  }
}
于 2013-01-14T21:07:57.290 回答
3

您可以使用Patterns.WEB_URL

public boolean isLink(String string) {
    return Patterns.WEB_URL.matcher(string).matches();
}

请注意,Patterns该类仅从 API 级别 8 开始可用,但您可以在此处获取其源代码https://github.com/android/platform_frameworks_base/blob/master/core/java/android/util/Patterns.java

于 2013-01-14T21:13:50.023 回答
0
Pattern httpMatcher = Pattern.compile("((http\\://|https\\://)|(www.))+((\\S+):(\\S+)@)?+(([a-zA-Z0-9\\.-]+\\.[a-zA-Z]{2,4})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(/[a-zA-Z0-9%&#-:/-_\\?\\.'~]*)?");

这正在工作,谢谢

于 2013-01-18T16:15:39.827 回答