让我们考虑以下示例:
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
的东西代替 $1
用 replaceAll()
最佳答案
\\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/