Вы можете сделать что-то подобное в Java:
String[] tests = {
"{ in in in } out", // "{ in in in }"
"out { in in in }", // "{ in in in }"
" { in } ", // "{ in }"
"pre { in1 } between { in2 } post", // "{ in1 }{ in2 }"
};
for (String test : tests) {
System.out.println(test.replaceAll("(?<=^|\\})[^{]+", ""));
}
Регулярное выражение:
(?<=^|\})[^{]+
В основном мы сопоставляем любую строку, которая находится "снаружи", как определено как что-то, что следует за литералом }
, или начиная с начала строки ^
, пока не достигнет литерала {
, то есть мы сопоставим [^{]+
, мы заменим эту совпавшую "внешнюю" строку пустой строкой.
Смотри также
Решение Javascript без регулярных выражений, для нестабильного, но единственного верхнего уровня {...}
В зависимости от спецификации проблемы (это не совсем понятно), вы также можете сделать что-то вроде этого:
var s = "pre { { { } } } post";
s = s.substring(s.indexOf("{"), s.lastIndexOf("}") + 1);
Это именно то, что написано: для произвольной строки s
она берет свою подстроку, начиная с первой {
до последней }
(включительно).