将 href 标签添加到来自 JSON 的长字符串

Adding a href tag to a long string from a JSON

我遇到了一个问题,我有一个 json 对象,其中有一个名为 message 的值,其中有很多字符串,有些会甚至包含以下格式的链接(比如这个网站如何使用不同的粗体、斜体等格式)

[[www.randomwebsite.com]] gives www.randomwebsite.com

[[www.randomwebsite.com random]] gives random

我对顶部的正则表达式是:

\[\[.[^\]]*\]\]

我正在做 .replaceAll 尝试向它添加 href 标签,但它不起作用,因为我觉得我做错了。我的代码是

String htmlHyperlinkMessage = htmlStrikeMessage.replaceAll(Constants.HYPERLINK_REGEX, "<a href=\"\"></a>");

但这给了我一个数组越界异常,我只是坚持这个,任何人都可以提出任何建议吗?

非常感谢,我在论坛上四处寻找,但我找不到任何与我的示例相关的内容,因为不同超链接的格式让我感到困惑。

编辑

这是我的堆栈跟踪 logcat

java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at java.util.regex.Matcher.group(Matcher.java:579)
at java.util.regex.Matcher.appendEvaluated(Matcher.java:138)
at java.util.regex.Matcher.appendReplacement(Matcher.java:111)
at java.util.regex.Matcher.replaceAll(Matcher.java:319)
at java.lang.String.replaceAll(String.java:1600)
at com.myapp.android.model.PostItem.getMessage(PostItem.java:98)

当您用组替换某些内容时(如 </code>、<code>),您需要使用括号捕获该组。您遇到越界异常,因为 </code> 试图找到您创建的组,但您的正则表达式 <code>\[\[.[^\]]*\]\] 不包含任何组。

如果想把[[]]的内容作为一个组来抓取,可以加括号:\[\[(.[^\]]*)\]\]

进一步的解释请阅读本文的“3.4.分组和反向引用”部分:http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

而且替换 "<a href=\"\"></a>" 似乎也不对。它应该类似于 "<a href=\"\"></a>"

顺便说一下,我认为您的正则表达式中不需要 . 字符。它确实确保方括号不为空,但您可以通过将 * 替换为 + 来更清楚地实现相同的效果,如下所示:

\[\[([^\]]+)\]\]