使用正则表达式突出显示文本中的链接(Linkify vs Patterns)

Posted

技术标签:

【中文标题】使用正则表达式突出显示文本中的链接(Linkify vs Patterns)【英文标题】:Using regular expressions to highlight links in a text (Linkify vs Patterns) 【发布时间】:2021-08-20 23:44:54 【问题描述】:

为什么,用这种方法,我们只会使用最后一个模式:

Linkify.addLinks(someSpannable, Linkify.PHONE_NUMBERS)
Linkify.addLinks(someSpannable, Linkify.EMAIL_ADDRESSES)

在这种情况下,电话和电子邮件链接都将突出显示:

Linkify.addLinks(someSpannable, Patterns.PHONE, null)
Linkify.addLinks(someSpannable, Patterns.EMAIL_ADDRESS, null)

【问题讨论】:

【参考方案1】:

根据文档: https://developer.android.com/reference/android/text/util/Linkify#addLinks(android.text.Spannable,%20int)

public static final boolean addLinks (Spannable text, int mask)

扫描提供的 Spannable 的文本,并将掩码中指示的链接类型的所有出现转换为可点击的链接。 如果掩码不为零,它还会删除任何附加到 Spannable 的现有 URLSpans,以避免在同一文本上重复调用它时出现问题。

另一方面 https://developer.android.com/reference/android/text/util/Linkify#addLinks(android.text.Spannable,%20int,%20java.util.function.Function%3Cjava.lang.String,%20android.text.style.URLSpan%3E)

public static final boolean addLinks (Spannable text, 
            int mask, 
            Function<String, URLSpan> urlSpanFactory)

扫描提供的 Spannable 的文本,并将掩码中指示的链接类型的所有出现转换为可点击的链接。如果掩码不为零,它还会删除任何附加到 Spannable 的现有 URLSpans,以避免在同一文本上重复调用它时出现问题

【讨论】:

你可以澄清一下。我正确理解应该没有差异。当我运行我的代码时,我可以看到差异。对于模式,不会删除 UrlSpan。

以上是关于使用正则表达式突出显示文本中的链接(Linkify vs Patterns)的主要内容,如果未能解决你的问题,请参考以下文章

如何突出显示图像中的文本?

Python:使用JSON API链接通过正则表达式显示命名捕获组

正则表达式突出显示搜索匹配的数字

突出显示方括号内的文本(正则表达式?)Android kotlin

突出显示类似于 grep 的文本,但不过滤掉文本 [重复]

如何在 Tkinter 文本搜索方法中使用正则表达式?