Мне нужно найти последний индекс набора символов в строке.Рассмотрим набор символов: x, y, z и строку как Vereador Luiz Pauly Home , тогда мне нужен индекс как 18 .
для поиска индекса я создал шаблон с флагом DOTALL и жадным квантификатором как (? s). * (x | y | z) .Когда шаблон применяется к этой строке (многострочный), я могу узнать индекс из начальной группы.Код:
int findIndex(String str){
int index = -1;
Pattern p = Pattern.compile("(?s).*(x|y|z)");
Matcher m = regex.matcher(str);
if(m.find()){
index = m.start(1);
}
return index;
}
Как и ожидалось, он правильно возвращает значения, если есть совпадение.
Но если совпадения нет, то это занимает слишком много времени (17 минут для 600000 символов) , поскольку это совпадение Жадности.
Я пробовал с другими квантификаторами, но не могу получить желаемый результат. Так может ли кто-нибудь отослать какое-нибудь лучшее регулярное выражение?
PS: Я также могу подумать о том, чтобы просмотреть содержимое из прошлого и найти индекс. Но я надеюсь, что в регулярном выражении есть лучший способ, который может сделатьработа быстро.