基于match.group链接主题标签(1)

时间:2014-10-26 11:28:34

标签: android regex linkify

我正在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
*/

1 个答案:

答案 0 :(得分:1)

如果您要排除(?:^|\\W)#匹配的文字,请将其括在后面:

(?<=(?:^|\\W)#)

然后您可以删除捕获组,主匹配将仅包含#之后的内容。


以前,我建议:

(?<=\B#)

但是,在查看this bug reportthis question about inconsistency between \w and \b in Java之后,我会说在使用较短的一个时需要小心,因为\b\B的定义默认模式下未与\w同步。