Reg替换第一次出现的文本块+最后一次出现

时间:2012-07-23 12:32:35

标签: java regex

只是一个小问题。

我必须在几个字符串中引用一个文本,第一次出现一个,最后一次出现。

实施例

[quote]
Hi to all
[quote]
im fine
[/quote]
[/quote]

我讨厌在DIV内写下所有引用的文字。所以我有一个正则表达式:

String pattern = "\\[quote\\](.*?)\\[\\\quote\\\]";
body = body.replaceAll(pattern, "<div class=\"quote\">[quote]$1[/quote]</div>"); 

它有效,但正则表达式从第一个[quote]到第一个[/ quote],第二个[/ quote]在DIV之外。我想要的是:

<div class="quote">
[quote]
Hi to all
[quote]
im fine
[/quote]
[/quote]
</div>

感谢。

1 个答案:

答案 0 :(得分:1)

听起来像@nhahtdh所说,你只是想删除?以使*贪婪。

比较

public static void main(String[] args) {
    String    input = "[quote]\n"
        + "Hi to all\n"  
        + "[quote]\n"
        + "im fine\n"
        + "[/quote]\n"
        + "[/quote]\n";

    System.out.println( input.replaceAll( "(?s)\\[quote\\](.*?)\\[/quote]", "<div class=\"quote\">\n[quote]$1[/quote]\n</div>" ));
    System.out.println();
    System.out.println( input.replaceAll( "(?s)\\[quote\\](.*)\\[/quote]", "<div class=\"quote\">\n[quote]$1[/quote]\n</div>" ));
  }

输出:

<div class="quote">
[quote]
Hi to all
[quote]
im fine
[/quote]
</div>
[/quote]


<div class="quote">
[quote]
Hi to all
[quote]
im fine
[/quote]
[/quote]
</div>