簡體   English   中英

用正則表達式替換Java中的String並replaceAll

[英]Replace String in Java with regex and 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之外的所有內容。 我怎樣才能做到這一點?

如果有人可以幫助我會很好:)

您可以使用括號捕獲與模式匹配的子字符串。 然后,您可以在$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\"");

這不使用regexp。 但是也許它仍然可以解決您的問題。

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

這就是我要做的:

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\"");

如果只想替換所有內容,則不需要循環-我僅將其用於調試/顯示regex的業務方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM