2012-12-03 80 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\""); 

如果只是想替换所有的东西,你不需要循环 - 我只是为了调试/显示正则表达式如何做生意。