我正在Linkify
中尝试TextView
个标签
这是我提供的示例代码,但我需要根据match.group(1)
强调找到的主题标签
Linkify似乎基于match.group(0)
加下划线。
使用TransformFilter
我只能更改主题标签点击目的地而不是下划线链接的预览
总结一下,Linkify
会在match.group(0)
上创建下划线,但我想在match.group(1)
TextView tv_body = (TextView) view.findViewById(R.id.tv_body);
final Pattern pattern = Pattern.compile(
"(?:^|\\W)#([A-Za-z\\d\u00E7\u011F\u0131\u015F\u00F6\u00FC\u00C7\u011E\u0130\u015E\u00D6\u00DC]+)");
String scheme = "search://";
TransformFilter filter = new TransformFilter()
{
public final String transformUrl(final Matcher match, String url)
{
Log.d(Constants.TAG, "transformUrl - match.group(0):" +
match.group(0) + " - match.group(1):" + match.group(1));
return match.group(1);
}
};
Linkify.addLinks(tv_body, pattern, scheme, null, filter);
transformUrl - match.group(0):## dene - match.group(1):dene
transformUrl - match.group(0):#hashreal - match.group(1):hashreal transformUrl - match.group(0):+#arti - match.group(1):arti
transformUrl - match.group(0):(#de - match.group(1):de
transformUrl - match.group(0):#feriştah - match.group(1):feriştah
/*
tv_body text content:
nb#dnkjd
##dene
#hashreal
1#2
+#arti
%d(#de
#feriştah
şah#in
*/
答案 0 :(得分:1)
如果您要排除(?:^|\\W)#
匹配的文字,请将其括在后面:
(?<=(?:^|\\W)#)
然后您可以删除捕获组,主匹配将仅包含#
之后的内容。
以前,我建议:
(?<=\B#)
但是,在查看this bug report和this question about inconsistency between \w and \b in Java之后,我会说在使用较短的一个时需要小心,因为\b
和\B
的定义默认模式下未与\w
同步。