Java 替换所有捕获的组
我需要将以下内容转换为:Java 替换所有捕获的组,java,regex,capturing-group,Java,Regex,Capturing Group,我需要将以下内容转换为:“foo\u bar\u baz\u 2”到“fooBarBaz2” 我尝试使用这种模式: Pattern pattern = Pattern.compile("_([a-z])"); Matcher matcher = pattern.matcher("foo_bar_baz_2"); 是否可以使用matcher将第一个捕获的组(在“_”之后的字母)替换为大写的捕获组?是。替换为\U$1\E-表示为Java字符串“\\U$1\\E” 只要正则表达式中没有其他内容,就可
“foo\u bar\u baz\u 2”
到“fooBarBaz2”
我尝试使用这种模式:
Pattern pattern = Pattern.compile("_([a-z])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");
是否可以使用
matcher
将第一个捕获的组(在“_”之后的字母)替换为大写的捕获组?是。替换为\U$1\E
-表示为Java字符串“\\U$1\\E”
只要正则表达式中没有其他内容,就可以转储\E
并缩短为\U$1
考虑到@TimPietzcker的评论,您的正则表达式本身应该是
“u([a-z0-9])”
您可以使用匹配器的appendReplacement/appendTail方法,如下所示:
Pattern pattern = Pattern.compile("_([a-z0-9])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");
StringBuffer stringBuffer = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(stringBuffer, matcher.group(1).toUpperCase());
}
matcher.appendTail(stringBuffer);
System.out.println(stringBuffer.toString());
是的,这是有可能的(我想比我更了解Java的人也可以告诉你怎么做)。我只是想指出,使用该正则表达式,您将得到fooBarBaz_2
,因为[a-z]
与2
不匹配。
Pattern pattern = Pattern.compile("_([a-z0-9])");
Matcher matcher = pattern.matcher("foo_bar_baz_2");
StringBuffer stringBuffer = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(stringBuffer, matcher.group(1).toUpperCase());
}
matcher.appendTail(stringBuffer);
System.out.println(stringBuffer.toString());