Примечание. Это вопрос Java (только без Javascript, sed, Perl и т. Д.)
Мне нужно отфильтровать все "неохотные" фигурные скобки ({}
) в длинной строке текста.
(под "неохотным" я подразумеваю как квантификатор неохотного ).
Мне удалось найти следующее регулярное выражение, которое правильно находит и перечисляет все такие случаи:
Pattern pattern = Pattern.compile("(\\{)(.*?)(\\})", Pattern.DOTALL);
Matcher matcher = pattern.matcher(originalString);
while (matcher.find()) {
Log.d("WITHIN_BRACES", matcher.group(2));
}
Моя проблема сейчас заключается в том, как заменить каждый найденный matcher.group(0)
на , соответствующий matcher.group(2)
.
Интуитивно я пытался:
while (matcher.find()) {
String noBraces = matcher.replaceAll(matcher.group(2));
}
Но это заменило все найденные matcher.group(0)
только на first matcher.group(2)
, что, конечно, не то, что я хочу.
Есть ли в регулярном выражении Java выражение или метод для выполнения этого "соответствующего replaceAll", в котором я нуждаюсь?
ОТВЕТ: Благодаря приведенному ниже совету я смог предложить 2 исправления, которые сделали свое дело:
if (matcher.find()) {
String noBraces = matcher.replaceAll("$2");
}
- Исправление # 1: используйте
"$2"
вместо matcher.group(2)
- Исправление # 2: используйте
if
вместо while
.
Работает теперь как шарм.