从JSON向长字符串添加href标记

时间:2015-11-20 15:41:35

标签: android json regex href replaceall

我一直遇到一个问题,我有一个名为消息的值的json对象,它将包含大量字符串,有些甚至会包含以下格式的链接(如该网站如何以粗体,斜体等方式使用不同的格式

  

[[www.randomwebsite.com]]提供www.randomwebsite.com

  

[[www.randomwebsite.com random]]随机提供

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

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

我正在做一个.replaceAll尝试将href标签添加到它,但它没有工作,因为我觉得我做错了。我的代码是

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

但是这给了我一个超出界限的数组,我只是坚持这个,有人可以提出任何建议吗?

非常感谢,我在论坛上环顾四周,但由于不同超链接的格式让我感到困惑,因此无法找到与我的示例相关的任何内容。

修改

这是我的stacktrace 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)

1 个答案:

答案 0 :(得分:0)

当您使用某个组(例如$1$2)替换某些内容时,您需要使用括号捕获该组。你得到一个越界异常,因为$1试图找到你创建的一个组,但你的正则表达式\[\[.[^\]]*\]\]不包含任何组。

如果要将[[]]的内容作为一组捕获,可以添加括号:\[\[(.[^\]]*)\]\]

有关进一步说明,请阅读本文的“ 3.4。分组和返回参考”部分:http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

替换"$1<a href=\"$2\"></a>"似乎也不正确。它应该类似于"<a href=\"$1\">$1</a>"

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

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