将括号转换为链接Java

时间:2016-03-26 15:39:20

标签: java regex

我正在使用java编写一个小的android应用程序。我有一些文字,其中有些单词在括号内。我想将它们转换为链接。

* [[my text]] 
* [[my text]] 
* [[my text]] 

To

* <a href="http://my text">my text</a>
* <a href="http://my text">my text</a>
* <a href="http://my text">my text</a>

我对Regex知之甚少,请帮助。

2 个答案:

答案 0 :(得分:3)

小理论

正则表达式允许我们创建一些我们称之为capturing groups的东西。它们允许我们仅使用匹配文本的一部分。

例如X(a+)(b+)Y之类的正则表达式会尝试查找XaabbbY之类的文字并存储

  • 第1组a系列
  • 第2组b系列。

我们可以对存储在这些组中的匹配文本部分做一些事情。我们可以

  1. 只需使用Matcher#group(x)
  2. 获取(并稍后打印)它

    但我们也可以在

    中重复使用它
    1. 正则表达式\x(其中x表示组号)([a-z])\1是正则表达式,只会找到对:aa bb ... {{ 1}} yy
    2. 替换为zz$x此处也代表组号)。
    3. 您的案例

      在您的情况下,您希望将x[[之间的文字替换为]]

      要在<a href="http://(thatText)">(thatText)</a>[[之间查找文字,我们可以使用正则表达式]]

      • 我们用括号括起\[\[(.*?)\]\]所以我们只能重复使用括号之间的部分
      • .*?添加到?我们制作*?量词reluctant,这意味着不是像

        那样找到最大匹配
        *

        它会尝试找到最小匹配,如:

        foo [[a]] bar [[b]] baz
            ^^^^^^^^^^^^^^^
        

      因此,我们可以通过foo [[a]] bar [[b]] baz ^^^^^ ^^^^^ 重新使用第1组中的部分进行替换。换句话说,我们可以用$1

      之类的内容替换整个[[...]]部分

      这使我们得到像

      这样的解决方案
      "<a href="http://$1">$1</a>"

答案 1 :(得分:2)

要匹配使用\[\[([\s\S]+?)\]\],请替换使用<a href="$1">$1</a>

http://regexr.com/3d3g5

enter image description here