Я использую регулярное выражение для замены заполнителей в файле шаблона.Почему regex + группировка не проходит тест?
У меня есть этот метод:
public static String processTemplate(String template, Map<String, String> attributes) {
Matcher m = PLACEHOLDER_PATTERN.matcher(template);
String message = template;
boolean matches = m.matches();
if (matches) {
for (int i = 1; i < m.groupCount() + 1; i++) {
message = message.replaceAll(m.group(i), attributes.get(m.group(i)));
}
}
return message;
}
с этим рисунком:
private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("(\\$\\{.*?})");
Но этот тест не пройден:
@Test
public void templates() {
Map<String, String> attributes = new HashMap<>();
attributes.put("${wobble}", "wobble");
String result = processTemplate("wibble ${wobble}", attributes);
assertEquals("wibble wobble", result);
}
И я не знаю, почему. Кажется, что «match» возвращает false.
Тест - это только одна строка, но код продукта является многострочным –
У вас нет '^' или '$' в шаблоне, 'Pattern.MULTILINE' не повлияет на ваш шаблон. 'Pattern.DOTALL' заставит символы'. 'Match newline, и у вас есть'. 'В шаблоне. –
ваш шаблон «$ wobble» не имеет в нем никакой новой строки – Gavriel