2012-12-03 120 views
2

是否有簡單的解決方案通過在Java中使用正則表達式來解析String使用正則表達式替換Java中的字符串並替換所有

我必須改編一個HTML頁面。因此,我要解析多個字符串,例如:

href="/browse/PJBUGS-911" 
=> 
href="PJBUGS-911.html" 

字符串的圖案是唯一的不同相對應的ID(例如911)。我的第一個想法是這樣的:

String input = ""; 
String output = input.replaceAll("href=\"/browse/PJBUGS\\-[0-9]*\"", "href=\"PJBUGS-???.html\""); 

我想替換除ID以外的所有東西。我怎樣才能做到這一點?

將是很好,如果有人能幫助我:)

回答

3

您可以由您的模式匹配,使用圓括號capture子。然後,您可以使用$n替換中的捕獲的東西,其中n是括號組(從左到右計算左括號)的數目。對於你的例子:

String output = input.replaceAll("href=\"/browse/PJBUGS-([0-9]*)\"", "href=\"PJBUGS-$1.html\""); 

或者,如果你想:

String output = input.replaceAll("href=\"/browse/(PJBUGS-[0-9]*)\"", "href=\"$1.html\""); 
+1

感謝您提供非常快速的答案和解決方案。正常工作:-) – erwingun2010

1

這不使用正則表達式。但也許它仍然可以解決你的問題。

output = "href=\"" + input.substring(input.lastIndexOf("/")) + ".html\""; 
+0

不要忘了添加「.html」到最後 – ean5533

+0

這很簡單直接。 –

+0

@Vulcan是的。他要求他回答。 – ean5533

0

這是我會怎麼做:

public static void main(String[] args) 
    { 
     String text = "href=\"/browse/PJBUGS-911\" blahblah href=\"/browse/PJBUGS-111\" " + 
       "blahblah href=\"/browse/PJBUGS-34234\""; 

     Pattern ptrn = Pattern.compile("href=\"/browse/(PJBUGS-[0-9]+?)\""); 

     Matcher mtchr = ptrn.matcher(text); 

     while(mtchr.find()) 
     { 
      String match = mtchr.group(0); 
      String insMatch = mtchr.group(1); 



      String repl = match.replaceFirst(match, "href=\"" + insMatch + ".html\""); 

      System.out.println("orig = <" + match + "> repl = <" + repl + ">"); 
     } 
    } 

這恰恰說明了正則表達式和替換,而不是最終的格式化文本,您可以通過使用Matcher.replaceAll得到:

String allRepl = mtchr.replaceAll("href=\"$1.html\""); 

如果只是想替換所有的東西,你不需要循環 - 我只是爲了調試/顯示正則表達式如何做生意。