用regex和replaceAll替换Java中的String

时间:2012-12-03 19:00:10

标签: java regex replaceall

在Java中使用正则表达式解析String是否有一个简单的解决方案?

我必须调整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 个答案:

答案 0 :(得分: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 :(得分:1)

这不使用正则表达式。但也许它仍然可以解决你的问题。

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

答案 2 :(得分: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\"");

如果只是对替换所有内容感兴趣,则不需要循环 - 我只是用它来调试/显示正则表达式如何开展业务。