Я видел довольно много вопросов о том, как идентифицировать повторяющиеся шаблоны для сумасшедших строк и вещей, но ничего, что захватит повторяющееся число или повторяющийся шаблон числа.
Я пытаюсь найти способ написать функцию, которая может идентифицировать оба этих случая. Например, у меня есть модель, похожая на 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;
демонстрация