簡體   English   中英

使用正則表達式替換兩個定界符之間的所有字符

[英]Replace all characters between two delimiters using regex

我正在嘗試使用正則表達式將兩個定界符之間的所有字符替換為另一個字符。 替換字符串的長度應與刪除的字符串的長度相同。

String string1 = "any prefix [tag=foo]bar[/tag] any suffix";
String string2 = "any prefix [tag=foo]longerbar[/tag] any suffix";
String output1 = string1.replaceAll(???, "*");
String output2 = string2.replaceAll(???, "*");

預期的輸出將是:

output1: "any prefix [tag=foo]***[/tag] any suffix"  
output2: "any prefix [tag=foo]*********[/tag] any suffix"

我已經嘗試過"\\\\\\\\\\[tag=.\\*?](.\\*?)\\\\\\\\[/tag]"但這將整個序列替換為一個"\\*"
我認為"(.\\*?)"是這里的問題,因為它可以一次捕獲所有內容。

我該如何寫一些單獨替換每個字符的東西?

你可以使用正則表達式

\w(?=\w*?\[)

會匹配“ [\\”之前的所有字符

參見regex演示在線編譯器演示

您可以一一捕獲字符,然后用*替換:

public static String replaceByStar(String str) {
    String pattern = "(.*\\[tag=.*\\].*)\\w(.*\\[\\/tag\\].*)";
    while (str.matches(pattern)) {
        str = str.replaceAll(pattern, "$1*$2");
    }
    return str;
}

像這樣使用它將打印您的tx2預期輸出:

public static void main(String[] args) {
    System.out.println(replaceByStar("any prefix [tag=foo]bar[/tag] any suffix"));
    System.out.println(replaceByStar("any prefix [tag=foo]loooongerbar[/tag] any suffix"));
}

因此,模式"(.*\\\\[tag=.*\\\\].*)\\\\w(.*\\\\[\\\\/tag\\\\].*)"

  • (.*\\\\[tag=.*\\\\].*)捕獲開始,最終在中間出現一些字符
  • \\\\w是您要替換的字符
  • (.*\\\\[\\\\/tag\\\\].*)捕獲結尾,最后在中間插入一些字符

替換$1*$2

該模式為(text$1)oneChar(text$2) ,它將替換為(text$1)*(text$2)

暫無
暫無

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

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