идентификация повторяющихся чисел или числовых шаблонов в php

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

Я пытаюсь найти способ написать функцию, которая может идентифицировать оба этих случая. Например, у меня есть модель, похожая на 14285714285714 с рисунком 142857-142857-14 . В некоторых случаях образец можно было бы сказать, 7575757 : 75-75-75-7 . У меня также есть повторное число, например, 55555555 или 55555556 .

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

Заранее спасибо.

EDIT. Мне также нужно передать true, если изображение или повторное появление длиннее 3 цифр.

UPDATE Итак, я попробовал @stribizhev рекомендацию с preg_match и действительно смог обнаружить шаблон. Мне все еще нужно, чтобы мой рисунок был намного точнее. Если мой номер равен 4444 preg_match показывает мой шаблон как 44-44 . Мне нужно знать разницу в 4-4-4-4 и 75-75-75 . Может кто-нибудь помочь мне уточнить, как я получу более точный результат из preg_match?

Вот что я до сих пор.

  $num = 4444; if (count($num) >= 3) { $result = preg_match('/(\d+)\1/', $num, $matches); if ($result) { $repeat = "true"; echo "match: ".$matches[0].", ".$matches[1]; } } output: match: 4444, 44 

Хотя этот вывод не является неточным, это просто не так точно, как мне нужно. 44 – шаблон, но тем более 4 – шаблон. Как и в 7575 году, 75 – это образец.

Этот шаблон выполняет работу:

 $pattern = '~ \A # start of the string # find the largest pattern first in a lookahead # (the idea is to compare the size of trailing digits with the smallest pattern) (?= (\d+) \1+ (\d*) \z ) # find the smallest pattern (?<pattern> \d+? ) \3+ # that has the same or less trailing digits (?! .+ \2 \z) # capture the eventual trailing digits (?= (?<trailing> \d* ) ) ~x'; if (preg_match($pattern, $num, $m)) echo 'repeated part: ' . $m[0] . PHP_EOL . 'pattern: ' . $m['pattern'] . PHP_EOL . 'trailing digits: ' . $m['trailing'] . PHP_EOL; 

демонстрация