Я пишу регулярное выражение для проверки наличия подстроки, которая содержит как минимум 2 повторения некоторого шаблона рядом друг с другом.Я сопоставляю результат регулярного выражения с прежней строкой - если равен, то есть такой шаблон.Лучше сказать на примере: 1010 содержит шаблон 10, и он там 2 раза подряд.С другой стороны, 10210 не будет иметь такой схемы, потому что эти 10 не являются смежными.
Более того, мне нужно найти максимально длинный шаблон, и его длина должна быть не менее 1. Я написал выражение, чтобы проверить его ^.*?(.+)(\1).*?$
.Чтобы найти самый длинный шаблон, я использовал не жадную версию, чтобы сопоставить что-либо до patter, затем шаблон сопоставляется с группой 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