Android linkify URL 链接非 URL
Android linkify URLs links non URLs
我想让 textview 中的网页 links 可以点击。我使用了这个代码
tv.setLinksClickable(true);
tv.setAutoLinkMask(Linkify.WEB_URLS);
Linkify.addLinks(tv, Linkify.WEB_URLS);
它 link 验证网站 URL,但似乎随机 link 其他文本,如 z.xyz dzo.yzw 和其他。
如何让 linkify 只针对 link 个网址?为了尝试检测以 http:// 或 https:// 开头的 links 我尝试了这种模式编译
tv.setLinksClickable(true);
Pattern httpPattern = Pattern.compile("^(http|https)://");
Linkify.addLinks(tv, httpPattern,"");
但这没有用(没有 link 被突出显示)。正则表达式正确吗? addLinks 的第三个参数应该是什么?
感谢您提供任何使此工作正常进行的提示。
你可以这样继续:
String regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
if (tv.getText().toString().matches(regex)) {
tv.setLinksClickable(true);
Linkify.addLinks(tv, Linkify.WEB_URLS);
}
More about URL regex:
Regular expression to match URLs in Java
经过多次搜索和反复试验,这就是解决方案。不要使用默认值 Linkiny.WEB_URLS。使用查找 links 的自定义正则表达式模式。我使用了以下内容(et 是一个 EditText)。
et.setLinksClickable(true);
Pattern httpPattern = Pattern.compile("[a-z]+:\/\/[^ \n]*");
Linkify.addLinks(et, httpPattern,"");
这只会 link 化 URL 而不会像 Linkify.WEB_URLS 那样用句号分隔 2 个单词的其他字符串。
如果该正则表达式不足以满足您的需求,请参阅以下 link 以获取处理更复杂情况的大量经过测试的替代方案
https://mathiasbynens.be/demo/url-regex
希望对遇到同样问题的其他人有所帮助。
这是符合 RFC 3986(URL 标准)的模式:
public static final Pattern URL_PATTERN = Pattern.compile(
"(?:^|[\W])((ht|f)tp(s?):\/\/|www\.)"
+ "(([\w\-]+\.){1,}?([\w\-.~]+\/?)*"
+ "[\p{Alnum}.,%_=?&#\-+()\[\]\*$~@!:/{};']*)",
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
来自:.
我想让 textview 中的网页 links 可以点击。我使用了这个代码
tv.setLinksClickable(true);
tv.setAutoLinkMask(Linkify.WEB_URLS);
Linkify.addLinks(tv, Linkify.WEB_URLS);
它 link 验证网站 URL,但似乎随机 link 其他文本,如 z.xyz dzo.yzw 和其他。
如何让 linkify 只针对 link 个网址?为了尝试检测以 http:// 或 https:// 开头的 links 我尝试了这种模式编译
tv.setLinksClickable(true);
Pattern httpPattern = Pattern.compile("^(http|https)://");
Linkify.addLinks(tv, httpPattern,"");
但这没有用(没有 link 被突出显示)。正则表达式正确吗? addLinks 的第三个参数应该是什么?
感谢您提供任何使此工作正常进行的提示。
你可以这样继续:
String regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
if (tv.getText().toString().matches(regex)) {
tv.setLinksClickable(true);
Linkify.addLinks(tv, Linkify.WEB_URLS);
}
More about URL regex: Regular expression to match URLs in Java
经过多次搜索和反复试验,这就是解决方案。不要使用默认值 Linkiny.WEB_URLS。使用查找 links 的自定义正则表达式模式。我使用了以下内容(et 是一个 EditText)。
et.setLinksClickable(true);
Pattern httpPattern = Pattern.compile("[a-z]+:\/\/[^ \n]*");
Linkify.addLinks(et, httpPattern,"");
这只会 link 化 URL 而不会像 Linkify.WEB_URLS 那样用句号分隔 2 个单词的其他字符串。
如果该正则表达式不足以满足您的需求,请参阅以下 link 以获取处理更复杂情况的大量经过测试的替代方案 https://mathiasbynens.be/demo/url-regex
希望对遇到同样问题的其他人有所帮助。
这是符合 RFC 3986(URL 标准)的模式:
public static final Pattern URL_PATTERN = Pattern.compile(
"(?:^|[\W])((ht|f)tp(s?):\/\/|www\.)"
+ "(([\w\-]+\.){1,}?([\w\-.~]+\/?)*"
+ "[\p{Alnum}.,%_=?&#\-+()\[\]\*$~@!:/{};']*)",
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
来自:.