我想匹配大括号({}
)括起的字符串中的部分,并返回大括号内的内容。
大括号内的内容也可以包含“嵌套”大括号,这使得匹配正确的结束大括号变得很重要。
因此,如果打开另一个括号,则应忽略以下右括号。
作为一个起点,我使用了以下代码,它应该将字符串Stuff @upper{foo {bar} baz} {end}
转换为Stuff FOO {BAR} BAZ {end}
:
package com.stackoverflow;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExBraces {
public static void main(String[] args) {
String string = "Stuff @upper{foo {bar} baz} {end}";
Pattern pattern = Pattern.compile("@upper\\{(.*?)\\}");
Matcher matcher = pattern.matcher(string);
StringBuffer result = new StringBuffer();
while (matcher.find()) {
String key = matcher.group(1);
if (key != null) {
matcher.appendReplacement(result, key.toUpperCase());
}
}
matcher.appendTail(result);
System.out.println(result.toString());
} // END: main()
} // END: class
首先,我想忽略大括号的转义(\{
,\}
)。因此,按正确的顺序始终有相同数量的打开和关闭括号。
是一个可以解决这个问题的简洁正则表达式吗?