Как отрицать обратное регулярное выражение

#java #regex #replace #inverse

#java #регулярное выражение #заменить #обратное

Вопрос:

Я использую регулярное выражение Java. У меня есть следующая строка

 String s = "the location is at {emp.address.street} with the name {emp.name},{emp.surname}";
  

Для приведенной выше строки s.replaceAll( "\{(.*?)\}", "" ) возвращает следующую строку:

the location is at with the name ,

Теперь я хочу обратить это, чтобы получить следующий результат:

{emp.address.street}{emp.name}{emp.surname}

Ответ №1:

Этот протестированный скрипт работает для меня:

 public class TEST
{
    public static void main( String[] args )
    {
        String s = "the location is at {emp.address.street} with the name {emp.name},{emp.surname}";
        String result = s.replaceAll( "[^{}] |(\{(.*?)\})", "$1" );
        System.out.println(result);
    }
}
  

Комментарии:

1. Это здорово … не могли бы вы объяснить, как это работает? какова роль $ 1?

Ответ №2:

Вы можете создать Pattern и использовать Matcher.find() и Matcher.group() для получения частей этого шаблона. Вот Javadocs для классов: Сопоставитель javadoc Шаблон javadoc