You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Regex替换如何实现类似\U$1的匹配组转大写功能

在Java中实现正则分组内容转大写的替代方案

好问题!Java的标准正则替换语法里确实没有直接支持\U$1这种把分组匹配内容转大写的写法——这和Perl、PHP这类内置了这种语法糖的语言不一样。你遇到的"$1".toUpperCase()没用,是因为这个操作只是把字符串字面量"$1"本身转成大写(结果还是"$1"),完全没关联到正则匹配到的实际内容。

不过不用慌,咱们可以通过两种灵活的方式实现你要的效果,不需要手动逐个处理分组:

方法1:使用Matcher.appendReplacement手动拼接替换内容

这是Java传统的自定义正则替换方式,适合所有Java版本:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexUpperCaseDemo {
    public static void main(String[] args) {
        String input = "foo bar baz";
        // 匹配每个单词的第一个字符作为分组1,剩余部分作为分组2
        Pattern pattern = Pattern.compile("(\\b\\w)(\\w*)");
        Matcher matcher = pattern.matcher(input);
        StringBuffer resultBuffer = new StringBuffer();

        while (matcher.find()) {
            // 将分组1转大写,分组2保持原样(或按需处理)
            String replacement = matcher.group(1).toUpperCase() + matcher.group(2);
            // 将替换内容追加到结果缓冲区
            matcher.appendReplacement(resultBuffer, replacement);
        }
        // 追加剩余未匹配的内容
        matcher.appendTail(resultBuffer);

        System.out.println(resultBuffer.toString()); // 输出 Foo Bar Baz
    }
}

方法2:Java 9+ 用replaceAll结合函数式接口

Java 9给Matcher增加了replaceAll(Function<MatchResult, String>)方法,写法更简洁:

import java.util.regex.Pattern;

public class RegexUpperCaseJava9 {
    public static void main(String[] args) {
        String input = "foo bar baz";
        String output = Pattern.compile("(\\b\\w)(\\w*)")
                .matcher(input)
                // 对每个匹配结果,将分组1转大写后拼接分组2
                .replaceAll(match -> match.group(1).toUpperCase() + match.group(2));

        System.out.println(output); // 同样输出 Foo Bar Baz
    }
}

这两种方式都能实现类似其他语言\U$1的效果,而且还支持更复杂的自定义转换逻辑(比如同时转大写、处理特殊字符等)。

内容的提问来源于stack exchange,提问作者user7780894

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:39:28