java - 如何用正则表达式替换组的内容

标签 java regex

这是原始字符串:

233<C:\Users\Grapes\Documents\title.png>233<C:\Users\Grapes\Documents\title.png>33

这是我想要的替换字符串: 233<1>233<2>33

我想用我上传到服务器后得到的id替换字符串中的文件路径,但是我的程序死循环了。

public void sendMessage(String msg) {
    new Thread(()-> {
        var pat = Pattern.compile("<(.*?[^\\\\])>");
        var matcher = pat.matcher(msg);
        int k = 0;
        while (matcher.find()) {
            matcher.replaceFirst("<" + k++ + ">"));
        }
        System.out.println(msg);
    }).start();
}

最佳答案

您可以使用 Matcher#appendReplacement :

String s = "233<C:\\Users\\Grapes\\Documents\\title.png>233<C:\\Users\\Grapes\\Documents\\title.png>33";
int k = 0;
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile("<[^<>]*>").matcher(s);
while (m.find()) {
    m.appendReplacement(result, "<" + ++k + ">");
}
m.appendTail(result);
System.out.println(result.toString());
// => 233<1>233<2>33

参见 Java demo .

<[^<>]*> pattern 在您的情况下就足够了,因为它将匹配 < , 然后是 < 以外的任意 0 个或多个字符和 >然后 < .

关于java - 如何用正则表达式替换组的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55179209/

相关文章:

java - Map.Entry.comparingByValue().reversed() 的类型是什么?

java - 使用 openNTF Domino API 作为插件开发中的依赖项

java - 比这更有效的 split 方式吗?

java - 模式语法错误

regex - Instr 等效于 perl?

java - 如何在数字和斜杠(文件路径中的图像分辨率)上匹配 Java 正则表达式

java - 使用 Java 连接到本地主机独立 HBase(无需 Kerberos)时出现 "MasterNotRunningException Failed to find any Kerberos tgt"

java - 在正确的时间启动具有 Intent 过滤器的 Activity

java - Eclipse 文件搜索对话框 - 组联合和否定的正则表达式

javascript - 正则表达式在 HTML 文件中使用 getAttribute 批量替换 attribute[x]