【问题标题】:Adding a href tag to a long string from a JSON将 href 标记添加到 JSON 中的长字符串
【发布时间】:2016-02-23 04:07:22
【问题描述】:

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

[[www.randomwebsite.com]] 给出 www.randomwebsite.com

[[www.randomwebsite.com random]] 给出随机数

我最上面的正则表达式是:

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

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

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

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

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

编辑

这是我的堆栈跟踪日志

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)

【问题讨论】:

  • 请发布您的 logcat 堆栈跟踪
  • 正则表达式对我来说看起来不正确。例如,您没有转义方括号。
  • 你的 href 字符串开头的 $1 是什么?
  • @abbath 我遵循了我在此找到的粗体和斜体的 java 正则表达式的标准,并认为它是相同的......但我确定它不是
  • @IlyaKogan 正则表达式模式取自使用相同类型的 iOS 应用程序,我无法将功能从 swift 转换为 android

标签: android json regex href replaceall


【解决方案1】:

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

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

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

替换 "$1&lt;a href=\"$2\"&gt;&lt;/a&gt;" 似乎也不对。它应该类似于"&lt;a href=\"$1\"&gt;$1&lt;/a&gt;"

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多