Я ищу вперед в массиве строк с регулярным выражением, например:
for (int j = line; j < lines.length; j++) {
if (lines[j] == null || lines[j].isEmpty()) {
continue;
}
matcher = pattern.matcher(lines[j]);
if (matcher.find(offset)) {
offset = matcher.end();
line = j;
System.out.println("found \""+matcher.group()+"\" at line "+line+" ["+matcher.start()+","+offset+"]");
return true;
}
offset = 0;
}
return false;
Обратите внимание, что в моей реализации выше я сохраняю line
и offset
для непрерывного поиска.
В любом случае, теперь я хочу искать назад из этой [линии, смещения].
Мой вопрос: есть ли способ эффективно искать в обратном направлении регулярное выражение? если нет, что может быть альтернативой?
Уточнение: В обратном порядке я хочу найти предыдущий матч.
Например, скажите, что я ищу "dana" в
"dana nama? dana kama! lama dana kama?"
и попал во второй матч. Если я снова сделаю matcher.find()
, я буду искать вперед и получить 3-й матч. Но я хочу искать назад и добираться до 1-го матча.
вышеприведенный код должен вывести что-то вроде:
found "dana" at line 0 [0,3] // fwd
found "dana" at line 0 [11,14] // fwd
found "dana" at line 0 [0,3] // bwd