У меня возникла проблема с регулярным выражением ruby. Мне нужно найти все (потенциально совпадающие) совпадения. Это упрощение задачи:Ruby Regex, получить все возможные совпадения (без обрезки строки)
#Simple example
"Hey".scan(/../)
=> ["He"]
#Actual results
#With overlapping matches the result should be
=> ["He"], ["ey"]
Регулярное выражение Я пытаюсь выполнить и получить все результаты для выглядит следующим образом:
"aaaaaa".scan(/^(..+)\1+$/) #This looks for multiples of (here) "a" bigger than one that "fills" the entire string. "aa"*3 => true, "aaa"*2 => true. "aaaa"*1,5 => false.
=> [["aaa"]]
#With overlapping results this should be
=> [["aa"],["aaa"]]
Есть библиотека или способ сделать регулярное выражение в рубине для получения результатов, которые я получаю?
Я нашел некоторые подсказки, что это было возможно в Perl, но после нескольких часов исследований я ничего не нашел о способе Ruby сделать это.
Однако я смог найти это «Javascript Regex - Find all possible matches, even in already captured matches», но я не смог найти ничего похожего на Ruby и не нашел что-то похожее на последнее свойство индекса в версии Ruby. Честно говоря, я не думаю, что это сработало бы, так как регулярное выражение, которое я намереваюсь использовать, является рекурсивным и полагается на всю строку, в то время как этот метод отбрасывает строку.
Итак, в основном вы хотите перестановку строки? – HamZa
Нет. Это просто пример. Реальное регулярное выражение немного сложнее, но это проблема, которая возникает. Метод сканирования отрывает части найденной строки и продолжается. Мне нужно, чтобы он сохранил строку, чтобы ее можно было просмотреть с помощью следующего возможного совпадения. – Automatico
Я не уверен, но первый и второй примеры немного противоречат друг другу. Следуя первому примеру, я бы подумал, что второй должен вернуть '[aa, aa, aa, aa, aa ...., aaa, aaa, aaa ..., aaaa, aaaa, aaaa ...., aaaaa , aaaaa, aaaaaa] ' – HamZa