我有一个包含以下代码的巨大字符串,并且我需要以以下方式提取包含:如果有任何HTML追加它,并且有任何包含以下模式的子字符串,请以适当的格式和位置创建一个链接然后继续。

例:

<div id="contentPermission">
  [[MI44,MI304,MI409,MI45,MI264,MI108,MI46,MI47,MI48,MI49,MI50,MI51,MI52,MI58,MI530]]

</div>
<div>&nbsp;</div>

<p>&nbsp;</p>

<div>&nbsp;</div>

<p>&nbsp;</p>

<p>[[LP1137]]</p>


模式:以“ [[”开头,以“]]结尾
上面的代码形式:

[[anything between these brackets]]


所以外面应该是这样的:

<div id="contentPermission">

  <a href="index?page=content&id=MI44></a>

  <a href="index?page=content&id=MI304></a>

  <a href="index?page=content&id=MI409></a>

 ......

 ......
</div>
<div>&nbsp;</div>

<p>&nbsp;</p>

<div>&nbsp;</div>

<p>&nbsp;</p>

<p><a href="index?page=content&id=LP1137></a></p>

最佳答案



public static void main(String[] args) {

    StringBuilder str = new StringBuilder("<div id=\"contentPermission\">"
            + "  [[MI44,MI304,MI409,MI45,MI264,MI108,MI46,MI47,MI48,MI49,MI50,MI51,MI52,MI58,MI530]]"
            + "</div><div>&nbsp;</div><p>&nbsp;</p><div>&nbsp;</div><p>&nbsp;</p><p>[[LP1137]]</p>");

    System.out.println("Before " + str.toString()+"\n\n\n");

    Pattern pattern = Pattern.compile("\\[{2}.[^\\]]*\\]{2}");
    Matcher matcher = pattern.matcher(str);

    while(matcher.find()){

        String codes = matcher.group(0);
        codes = codes.substring(2, codes.length()-2);

        StringBuilder urls = new StringBuilder();
        for(String code:codes.split(",")){
            urls.append("<a href=\"index?page=content&id=" + code + "></a>\n");
        }
        str = new StringBuilder(matcher.replaceFirst(urls.toString()));
        matcher = pattern.matcher(str);
    }

    System.out.println("Replaced " + str.toString());
}

08-18 09:13
查看更多