Извлечение нескольких токенов из пути json с помощью регулярного выражения

#java #regex #token

#java #регулярное выражение #токен

Вопрос:

Я должен извлечь токены из текста, который мне нужно сопоставить с использованием регулярного выражения. Пример текста может быть примерно таким.

 data.orderType.`order.created.time`
  

Прямо сейчас я использую следующее регулярное выражение для обозначения этой строки.

 `(.*?)`|[^.] 
  

Это регулярное выражение частично маркирует строку и выдает токены в виде

 data,orderType,`order.created.time`
  

проблема здесь в том, что при возврате токенов также включается обратная привязка. Как я могу сбросить обратную ссылку и просто получить следующее?

 data,orderType,order.created.time
  

Ответ №1:

Вы уже захватили часть между обратными ссылками, просто захватите matcher.group(1) , если она участвовала в совпадении (= если она совпала):

Демонстрация Java:

 String s = "data.orderType.`order.created.time`";
String regex = "`([^`]*)`|[^.`] ";
List<String> result = new ArrayList<>();
Matcher m = Pattern.compile(regex).matcher(s);
while (m.find()) {
   if (m.group(1) != null) {
       result.add(m.group(1));
   } else {
       result.add(m.group());
   }
}
System.out.println(result);
// => [data, orderType, order.created.time]
  

Обратите внимание, что я также добавил обратную метку к классу отрицаемых символов, [^.`] поскольку я предполагаю, что обратные метки могут быть только сопряжены.