Поиск последнего (самого правого) соответствия для произвольного регулярного выражения в ruby

StackOverflow https://stackoverflow.com/questions/814213

  •  03-07-2019
  •  | 
  •  

Вопрос

Я работаю над текстовым редактором на ruby, и мне нужно поддерживать функцию "Найти" с помощью пользовательских шаблонов регулярных выражений.Вот простой (знакомый) пример использования:

Пользователь Joe редактирует текстовый файл и поместил курсор где-то в середине файла.Он хочет искать назад из текущего местоположения курсора найдите ближайшую подстроку, соответствующую произвольному регулярному выражению.

Я думаю, что эта проблема сводится к применению шаблона пользователя ко всей строке, предшествующей местоположению курсора в файле.Конечно, я мог бы перебрать все совпадения с начала файла и использовать последнее совпадение, но это кажется крайне неэффективным...Было бы лучше выполнить поиск "справа налево", но я не нашел способа сделать это с помощью ruby Regexp.Ты можешь помочь?

Это было полезно?

Решение

Используйте метод rindex для вашей строки.Вот так:

>> 'ssBssBss'.rindex(/B/)
=> 5

Другие советы

ищущий .*(foo) также следует найти крайний правый foo, благодаря жадной природе .* (но rindex может быть быстрее - для проверки нужна микробенчмарка!).

Я думаю, что rindex - это правильный путь.Похоже, что rindex на самом деле будет выполнять итерацию по строке в обратном направлении.Проверьте строку 957 из строка.c

Похоже, кто-то нашел способ обратные регулярные выражения в PERL еще в 2001 году.Итак, вы бы перевернули строку и регулярное выражение ... затем использовали метод слева направо.

Я уверен, что сейчас это уже перебор, и вы можете использовать rindex

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top