2

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

我必须适应一个 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 之外的所有内容。我怎样才能做到这一点?

如果有人可以帮助我会很好:)

4

3 回答 3

3

您可以使用括号捕获与您的模式匹配的子字符串。然后您可以在替换中使用捕获的内容,$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\"");
于 2012-12-03T19:02:54.970 回答
1

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

output = "href=\"" + input.substring(input.lastIndexOf("/")) + ".html\"";
于 2012-12-03T19:05:09.993 回答
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\"");

如果只是对替换所有感兴趣,则不需要循环-我仅将其用于调试/显示正则表达式的业务方式。

于 2012-12-03T19:23:18.367 回答