正则表达式匹配并获得 {{aaa}}

时间:2021-07-14 11:52:54

标签: java regex string replace

我想做以下事情:

转换

“{{ interface_ID }} 那里应该{{interface_ID}}LD BE CODE HERE:{{interface_ID}}”

“{​{interface_ID}} 那里应该{​{interface_ID}}LD BE CODE HERE: {​{interface_ID}}”

我尝试了以下代码,但没有得到正确的结果

    Pattern CURLY_BRACKETS_PLACEHOLDER = Pattern.compile("\\{\\{(.*?)\\}\\}");
    Matcher m = CURLY_BRACKETS_PLACEHOLDER.matcher(htmlString);
    if(m.find()) {
        for (int i = 1; i <= m.groupCount(); i++) {
            String script = m.group(i);
            String scriptWithPlaceholder = "{{"+script+"}}";
            String replacementToken = "{"+ ZERO_WIDTH_SPACE_CHARACTER +"{"+script+"}}";
            htmlString = htmlString.replace(scriptWithPlaceholder, replacementToken);
        }
    }
    return htmlString;

请告诉我如何实现这一目标

2 个答案:

答案 0 :(得分:1)

看看您尝试过的模式,您可以对第一个卷曲之后的部分使用捕获组进行匹配。

\{(\{.*?}})

并替换为

{&#8203;$1

看到一个 regex demo 和一个 Java demo

示例代码

String regex = "\\{(\\{.*?\\}\\})";
String string = "{{ interface_ID }} THERE SHOU{{interface_ID}}LD BE CODE HERE: {{interface_ID}}";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

System.out.println(matcher.replaceAll("{&#8203;$1"));

输出

{&#8203;{ interface_ID }} THERE SHOU{&#8203;{interface_ID}}LD BE CODE HERE: {&#8203;{interface_ID}}

答案 1 :(得分:0)

Pattern CURLY_BRACKETS_PLACEHOLDER = Pattern.compile("\\{\\{(.*?)\\}\\}");
Matcher m = CURLY_BRACKETS_PLACEHOLDER.matcher(htmlString);
while(m.find()) {
        String script = m.group(1);
        String scriptWithPlaceholder = "{{"+script+"}}";
        String replacementToken = "{"+ ZERO_WIDTH_SPACE_CHARACTER +"{"+script+"}}";
        htmlString = htmlString.replace(scriptWithPlaceholder, replacementToken);
}
return htmlString;