Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android上链接StackOverflow使用的标记?_Android_Regex - Fatal编程技术网

如何在Android上链接StackOverflow使用的标记?

如何在Android上链接StackOverflow使用的标记?,android,regex,Android,Regex,我的应用程序从API加载注释,该API通常包含与堆栈溢出上的标记相同的链接。(如果有此标记样式的名称可以帮助我搜索它,请在评论中告诉我) 我尝试将它们转换为与的链接 private static final String REGEX_LINK_MARKUP = "\\[(.*?)\\]\\((.*?)\\)"; private static final String REGEX_LINK_REPLACEMENT = "<a href=\"$2\">$1</a>"; com

我的应用程序从API加载注释,该API通常包含与堆栈溢出上的标记相同的链接。(如果有此标记样式的名称可以帮助我搜索它,请在评论中告诉我)

我尝试将它们转换为与的链接

private static final String REGEX_LINK_MARKUP = "\\[(.*?)\\]\\((.*?)\\)";
private static final String REGEX_LINK_REPLACEMENT = "<a href=\"$2\">$1</a>";
commentText.setText(comment.getBody().replaceAll(REGEX_LINK_MARKUP, REGEX_LINK_REPLACEMENT)));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    //the constants are the same patterns from above
    commentText.setText(Html.fromHtml(comment.getBody().replaceAll(REGEX_LINK_MARKUP, REGEX_LINK_REPLACEMENT), Html.FROM_HTML_MODE_LEGACY));
} else {
    commentText.setText(Html.fromHtml(comment.getBody().replaceAll(REGEX_LINK_MARKUP, REGEX_LINK_REPLACEMENT)));
}
当然,这显示了带有href部分可点击的HTML,所以我目前正在将它们转换为带有的链接

private static final String REGEX_LINK_MARKUP = "\\[(.*?)\\]\\((.*?)\\)";
private static final String REGEX_LINK_REPLACEMENT = "<a href=\"$2\">$1</a>";
commentText.setText(comment.getBody().replaceAll(REGEX_LINK_MARKUP, REGEX_LINK_REPLACEMENT)));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    //the constants are the same patterns from above
    commentText.setText(Html.fromHtml(comment.getBody().replaceAll(REGEX_LINK_MARKUP, REGEX_LINK_REPLACEMENT), Html.FROM_HTML_MODE_LEGACY));
} else {
    commentText.setText(Html.fromHtml(comment.getBody().replaceAll(REGEX_LINK_MARKUP, REGEX_LINK_REPLACEMENT)));
}
我现在看到正确颜色的范围,但它是不可点击的。这个领域已经有了

android:linksClickable="true"
我是否将以下内容保留为
none
all
没有区别(链接不可链接)

  • 在文本视图中单击此类标记的正确方法是什么?
  • 有没有不使用HTML制作文本视图链接的方法?
  • 有没有比我的基本模式更有效的正则表达式?

这是使用替换和拆分的建议:

public static String getFormatted(String rawInput){//rawInput is the link. It does not find links from a bulk of text.
    String[] content;
    content = rawInput.split("\\]\\(");//Split the input
    String ctnt = content[0].replaceAll("\\[", "");//remove remaining link bracket
    String link = content[1].replaceAll("\\)", "");
    String format = "<a href=\"%s\">%s</a>";//The format
    return String.format(Locale.ENGLISH, format, link, ctnt);//Format and return the link in the format of an `a`-tag
}
返回:

<a href="https://example.com">This is link text</a>
它使用此答案顶部提供的方法

它打印出:

[link](https://example.com)//The link extracted from the block
<a href="https://example.com">link</a>//The formatted link
[链接](https://example.com)//从块中提取的链接
//格式化链接

建议使用替换和拆分:

public static String getFormatted(String rawInput){//rawInput is the link. It does not find links from a bulk of text.
    String[] content;
    content = rawInput.split("\\]\\(");//Split the input
    String ctnt = content[0].replaceAll("\\[", "");//remove remaining link bracket
    String link = content[1].replaceAll("\\)", "");
    String format = "<a href=\"%s\">%s</a>";//The format
    return String.format(Locale.ENGLISH, format, link, ctnt);//Format and return the link in the format of an `a`-tag
}
返回:

<a href="https://example.com">This is link text</a>
它使用此答案顶部提供的方法

它打印出:

[link](https://example.com)//The link extracted from the block
<a href="https://example.com">link</a>//The formatted link
[链接](https://example.com)//从块中提取的链接
//格式化链接

如果必须考虑转义分隔符,则一般正则表达式是

\[([^\\]*(?:\\[\S][^\\]]*)\]\([^\\]]*(?:\\[\S][^\\]]*)\)

扩大

 \[
 (                             # (1 start)
      [^\\\]]* 
      (?: \\ [\S\s] [^\\\]]* )*
 )                             # (1 end)
 \]

 \(
 (                             # (2 start)
      [^\\)]* 
      (?: \\ [\S\s] [^\\)]* )*
 )                             # (2 end)
 \)

如果必须考虑转义分隔符,则一般正则表达式是

\[([^\\]*(?:\\[\S][^\\]]*)\]\([^\\]]*(?:\\[\S][^\\]]*)\)

扩大

 \[
 (                             # (1 start)
      [^\\\]]* 
      (?: \\ [\S\s] [^\\\]]* )*
 )                             # (1 end)
 \]

 \(
 (                             # (2 start)
      [^\\)]* 
      (?: \\ [\S\s] [^\\)]* )*
 )                             # (2 end)
 \)

您可能需要小心使用这种类型的表达式
\[(.*?\]\(.*?)
。可能是转义的分隔符在分隔符的内部是有效的。好建议,这是一次懒惰的第一次尝试,我是基于一条评论,我刚刚遇到类似于
“fsfsg[dfsdf sdfds](…):)”
所以让它懒惰匹配您可能需要小心使用这种类型的表达式
\[(.*?)\(.*?)
。可能是转义的分隔符在分隔符的内部是有效的。好的建议,这是一次懒惰的第一次尝试,我是基于一条评论,我刚刚遇到类似于
“fsfsg[dfsdf sdfds](…):)”
所以让它懒惰匹配hanks,什么是LinkMovementMethod?根据源代码(请参阅该代码上方的链接)这就是你前进的方式,允许
LinkMovementMethod可以被替换为你必须让链接可点击的方法(假设你有一个有效的方法)@NickCardoso添加了一个更新,包括改变文本块。它没有针对多个链接进行优化,但可以与一个链接配合使用。它提取链接并在其位置添加格式化链接我实际上不需要你的大部分答案-但你给我指出了正确的方向-只需添加
LinkMovementMethod
就足以让它工作!谢谢,什么是LinkMovementMethod?根据源代码(见代码上方的链接),这就是你如何向前移动,以允许
LinkMovementMethod被替换为你必须使链接可点击的方法(假设你有一个有效的方法)@NickCardoso添加了一个更新,其中包括更改文本块。它没有针对多个链接进行优化,但可以与一个链接配合使用。它提取链接并在其位置添加格式化链接我实际上不需要你的大部分答案-但你给我指出了正确的方向-只需添加
LinkMovementMethod
就足以让它工作!第二组(url)中的空白是否有效?我想了解一下
?:
的作用。因为那里的匹配器在我看来就像“匹配空格,然后是空格,然后是任何不是反斜杠的东西,只要你想匹配多少次”(你可以告诉我我不是正则表达式大师)@NickCardoso-这是一种通用正则表达式。这意味着组2将匹配任何内容,直到找到有效的未替换闭包(代码>)
。如果您关心一个有效的url,那么您必须稍微修改这个组。或者,只需在第2组中使用url正则表达式,但这可能比您想象的更糟糕。我希望目标字符串有一个有效的url,在这种情况下,您可以使用该字符串的有效url,即
\(.*)\)
我不是url语法大师,所以我不知道。空白在第二组(url)中有效吗?我想了解一下
?:
的作用。因为那里的匹配器在我看来就像“匹配空格,然后是空格,然后是任何不是反斜杠的东西,只要你想匹配多少次”(你可以告诉我我不是正则表达式大师)@NickCardoso-这是一种通用正则表达式。这意味着组2将匹配任何内容,直到找到有效的未替换闭包(代码>)
。如果您关心一个有效的url,那么您必须稍微修改这个组。或者,只需在第2组中使用url正则表达式,但这可能比您想象的更糟糕。我希望目标字符串有一个有效的url,在这种情况下,您可以使用该字符串的url,即
\(.*?)
我不是url语法大师,所以我不知道。