2012-07-23 144 views
0

只是一個小問題。註冊替換文本塊第一次出現+最後一次出現

我不得不引用一個字符串內的文本,其中第一個出現的是其​​中一個,最後一個出現的是其​​他的。

Ex。

[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] DIV的外面。我想要得到的是:

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

謝謝。

+1

使它貪婪通過去除''''?。? – nhahtdh 2012-07-23 12:35:34

+0

除非您通過添加更多測試用例+預期輸出來澄清您的問題,否則可能無法給您一個滿意的答案。 – nhahtdh 2012-07-23 12:46:26

+0

用<>替換[]並使用xml解析器 – OrangeDog 2012-07-23 12:49:24

回答

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> 
相關問題