Использование Java 7 и RegEx по умолчанию implementatiin в java.util.regex.Pattern, учитывая регулярное выражение, как это:Замена неоднократно происходящих групп из привязанного регулярных выражений в Java
^start (m[aei]ddel[0-9] ?)+ tail$
И строка, как это :
start maddel1 meddel2 middel3 tail
можно ли получить такой вывод с помощью привязанного регулярное выражение:
start <match> <match> <match> tail
.
я могу получить каждую группу без якорей, как это:
Regex: m[aei]ddel[0-9]
StringBuffer sb = new StringBuffer();
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
matcher.appendReplacement(sb, Matcher.quoteReplacement("<middle>"));
}
Проблема заключается в том, что я работаю на довольно большой набор данных и возможность закрепить образцы будет огромный выигрыш в производительности.
Однако, когда я добавляю якоря, единственный API, который я могу найти, требует целого соответствия и доступа к последнему вхождению группы. В моем случае мне нужно проверить правильность регулярного выражения (т. Е. Целое совпадение), но на этапе замены мне нужно иметь доступ к каждой группе самостоятельно.
Редактировать Я хотел бы избежать обходных решений, таких как поиск якорей в отдельном шаге, потому что это потребует больших изменений кода и обертывания его всего в RegExes.
вы просто заменяя каждый 'maddle' с ''? –
да, я не думаю, что мне нужно делать больше задач в согласованной последовательности – Mene
Чтобы уточнить: 'm [aei] ddel [0-9]' - просто пример, мои текущие регулярные выражения более сложны, и каждое регулярное выражение будет иметь другая замена. Важным моментом является то, что мне нужно заменить каждое появление группы matche своей собственной заменой, и регулярное выражение должно быть привязано. – Mene