Регулярное выражение для соответствия самой длинной повторяющейся подстроке

Я пишу регулярное выражение для проверки наличия подстроки, которая содержит как минимум 2 повторения некоторого шаблона рядом друг с другом. Я сопоставляю результат регулярного выражения с предыдущей строкой - если он равен, такой шаблон существует. Лучше сказать на примере: 1010 содержит шаблон 10, и он встречается 2 раза в непрерывной серии. С другой стороны, у 10210 не было бы такого шаблона, потому что эти 10 не являются смежными.

Более того, мне нужно найти как можно более длинный шаблон, и его длина должна быть не менее 1. Я написал выражение для его проверки ^. *? (. +) (\ 1). *? $ . Чтобы найти самый длинный шаблон, я использовал нежадную версию, чтобы сопоставить что-то перед шаблоном, затем шаблон сопоставляется с группой 1, и снова совпадает то же самое, что было сопоставлено с group1. Затем сопоставляется остальная часть строки, в результате получается такая же строка. Но есть проблема, заключающаяся в том, что регулярное выражение стремится вернуться после нахождения первого шаблона и на самом деле не учитывает, что я намерен сделать эти подстроки до и после как можно более короткими (оставив остальные как можно более длинными). Итак, из строки 01011010 я правильно понимаю, что есть совпадение, но шаблон, хранящийся в группе 1, просто 01 , хотя я бы исключил 101 .

Поскольку я считаю, что не могу сделать шаблон «более жадным» или мусорным до и после даже «более не жадным», я могу прийти только с идеей сделать регулярное выражение менее активным, но я не уверен, что это возможный.

Дополнительные примеры:

56712453289 - no pattern - no match with former string
22010110100 - pattern 101 - match with former string (regex resulted in 22010110100 with 101 in group 1)
5555555 - pattern 555 - match
1919191919 - pattern 1919 - match
191919191919 - pattern 191919 - match
2323191919191919 - pattern 191919 - match

Что я получу, используя текущее выражение (используются те же строки):

no pattern - no match
pattern 2 - match
pattern 555 - match
pattern 1919 - match
pattern 191919 - match
pattern 23 - match
14
задан Qtax 9 February 2012 в 20:05
поделиться