#java #regex #token
#java #регулярное выражение #токен
Вопрос:
Я должен извлечь токены из текста, который мне нужно сопоставить с использованием регулярного выражения. Пример текста может быть примерно таким.
data.orderType.`order.created.time`
Прямо сейчас я использую следующее регулярное выражение для обозначения этой строки.
`(.*?)`|[^.]
Это регулярное выражение частично маркирует строку и выдает токены в виде
data,orderType,`order.created.time`
проблема здесь в том, что при возврате токенов также включается обратная привязка. Как я могу сбросить обратную ссылку и просто получить следующее?
data,orderType,order.created.time
Ответ №1:
Вы уже захватили часть между обратными ссылками, просто захватите matcher.group(1)
, если она участвовала в совпадении (= если она совпала):
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]
Обратите внимание, что я также добавил обратную метку к классу отрицаемых символов, [^.`]
поскольку я предполагаю, что обратные метки могут быть только сопряжены.