【问题标题】:Linkify hashtags based on match.group(1)基于 match.group(1) 链接主题标签
【发布时间】:2014-10-26 11:28:34
【问题描述】:

我正在尝试在TextView 中添加Linkify 主题标签。
这就是我提供的示例代码,但我需要在找到的基于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
*/

【问题讨论】:

  • 如果 Linkify 实现还不够,您仍然可以将 Spannable.setSpan 与 URLSpan/ClickableSpan 跨度对象一起使用

标签: android regex linkify


【解决方案1】:

如果要排除(?:^|\\W)#匹配的文本,请将其包含在后视中:

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

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


之前,我建议这样做:

(?<=\B#)

但是,在查看this bug report 和this question about inconsistency between \w and \b in Java 之后,我想说你在使用较短的时需要小心,因为\b 和\B 在默认模式下的定义与@ 不同步987654329@.

【讨论】:

  • 非常感谢。完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多