java - 正则表达式替换替换字符串

标签 java regex

让我们考虑以下示例:

String s = str.replaceAll("regexp", "$1");

某些语言允许我们指定 \U$1 代替 $1 ,这会将匹配的组转换为大写字母。我如何使用 Java 实现同样的目标?

我知道我们可以使用 Pattern 类并获取组并将其转换为大写,但这不是我想要的。我只想用完成工作的东西来改变 $1

我也试过:

String s = str.replaceAll("regexp", "$1".toUpperCase());

但看起来 "$1".toUpperCase()"$1" 而不是匹配项。我确认它使用:

String s = str.replaceAll("regexp", method("$1"));

// method declared as method()
private static String method(String s) {
    System.out.println(s); // prints "$1"
    return s;
}

在 Java 中甚至允许吗?

编辑:

String s = "abc";
System.out.println(s.replaceAll("(a)", "$1")); // should print "Abc"

编辑可能的欺骗:

我不是在寻找使用 m.group() 的方法,是否可以使用类似 \U$1 的东西代替 $1replaceAll()

最佳答案

\\U 未在 java 正则表达式 AFAIK 中实现,您不能使用这样的正则表达式(.NET 具有 IIRC)。这有点冗长,但一种方法是:

    String test = "abc";
    Pattern p = Pattern.compile("(a)");
    Matcher m = p.matcher(test);

    StringBuilder sb = new StringBuilder();
    if (m.find()) {
        String match = test.substring(m.start(1), m.end(1));
        m.appendReplacement(sb, match.toUpperCase());
    }

    m.appendTail(sb);
    System.out.println(sb.toString()); 

关于java - 正则表达式替换替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48596870/

相关文章:

java.lang.NoSuchFieldError : CLIENT_ENDPOINT for Amazon ECS

java - 带有 Kubernetes 的 postgres 中的多个数据库?

java - 在工厂类中使用字段/变量,以便在通过工厂创建的对象之间使用

java - 如何使用 AOP 和 AspectJ 进行日志记录?

java - Spring java邮件: send mail impossible with yahoo

javascript - [8 个字符]-[4 个字符] 的正则表达式语句

javascript - "modern"网络浏览器中正则表达式的最大大小/长度?

Javascript正则表达式替换单词但不在大括号内

regex - MongoDb 未在查询说明符中注册字段

regex - 如果单个字符不止一个则不匹配