Удалите все нежелательные фигурные скобки, используя регулярные выражения - PullRequest
2 голосов
/ 05 сентября 2011

Примечание. Это вопрос 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. Исправление # 1: используйте "$2" вместо matcher.group(2)
  2. Исправление # 2: используйте if вместо while.

Работает теперь как шарм.

1 Ответ

2 голосов
/ 05 сентября 2011

Вы можете использовать специальный синтаксис обратных ссылок:

String noBraces = matcher.replaceAll("$2");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...