我一直遇到一个问题,我有一个名为消息的值的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)
答案 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>"
顺便说一下,我不认为你的正则表达式中的.
字符是必需的。它确实确保方括号不为空,但通过将*
替换为+
,您可以更清楚地获得相同的效果:
\[\[([^\]]+)\]\]