2016-11-02 3 views
0

У меня есть строка -> «abcabcabclslslsokjokjokj» Мне нужно найти алгоритм, который способен выявить все рецидивы (или по крайней мере один длинный уникальных)RegularExpression - Regexp найти самые длинные уникальные удобства перекрывающихся циклов в строке

Я нашел (\w+?)\1+ (работает для Ruby), он работает как шарм для одного повторения.

'abcabcabcabc' #=> 'abc' 

, но не для 'ababcababcababcababcababcababc', где ожидаемый результат ababc, но выходит, что ab

Где я не прав, и что такое правильный способ найти: -

  1. Первый уникальный циклический рисунок (ababcababcababcjkjkjkjk =>ababc) 2 (Бонус). Все уникальные неперекрывающаяся циклические repititions в строке, (ababcababcababcabhabhabhlklklk =>ababc, abh, lk)
+1

Использовать жадный квантификатор: ['(\ w +) \ 1 +'] (https://regex101.com/r/ycPW8K/2) –

+0

Почему вы использовали ленивый квантификатор в первую очередь? –

ответ

1

Use this regex, чтобы найти все повторяющиеся подшаблоны в строке.

(?=(\w+)\1) 

Вам понадобится дополнительный код, чтобы проверить все соответствующие подгруппы для самого длинного.

Объяснение:

Более простое регулярное выражение необходимо, потому что первая повторяющаяся схема встречается будет «сожрать» часть строки, которая соответствует. И эта часть строки больше не может использоваться для других потенциальных совпадений. Рассмотрим следующий пример:

abcabccabc 

Самый длинный повторяется картина cabc, но это не будет найден простой регулярное выражение, как (\w+)\1, потому что это будет соответствовать abcabc, а затем больше не искать в той части строки.

Позитивный прогноз (?=...), который не потребляет строку при ее совпадении, используется для поиска самого длинного потенциального повторяющегося шаблона и сохранения его в группе захвата. Это будет проверяться, начиная с каждого символа в строке.

+0

Да, я также пробовал это регулярное выражение для совпадающих совпадений. Тем не менее, для этого требуется нечто иное, чем регулярное выражение. Однако точка даже не нужна. –

+0

@ WiktorStribiżew спасибо, не понял, что. –

 Смежные вопросы

  • Нет связанных вопросов^_^