在php中识别重复的数字或数字模式
我已经看到了很多关于为看起来疯狂的字符串和东西识别重复模式的问题,但是没有任何东西能够捕获重复的数字或重复的数字模式 我试图找到一种方法来编写一个函数,可以识别这两种情况。例如,我有一个类似于在php中识别重复的数字或数字模式,php,regex,Php,Regex,我已经看到了很多关于为看起来疯狂的字符串和东西识别重复模式的问题,但是没有任何东西能够捕获重复的数字或重复的数字模式 我试图找到一种方法来编写一个函数,可以识别这两种情况。例如,我有一个类似于14285714285714的数字模式,模式为142857-142857-14。在某些情况下,模式可以是:75757:75-75-75-7。我还有一个重复出现的数字,如555555或5555555 6 如何创建一个函数来确定一个数字是重复的还是有模式的?我想从这个意义上讲,重复的数字可以看作是一种模式。我对
14285714285714
的数字模式,模式为142857-142857-14
。在某些情况下,模式可以是:75757
:75-75-75-7
。我还有一个重复出现的数字,如555555
或5555555 6
如何创建一个函数来确定一个数字是重复的还是有模式的?我想从这个意义上讲,重复的数字可以看作是一种模式。我对此有点不知所措,对此的任何帮助都将不胜感激
先谢谢你
编辑我也只需要在模式或重复出现超过3位数时抛出true
更新所以我尝试了@Stribizev推荐preg_match,并且确实能够检测到模式。但我仍然需要我的模式更加精确。如果我的号码是4444
preg\u match,则我的模式显示为44-44
。我需要知道4-4-4-4
和75-75-75
之间的区别。有人能帮我澄清一下如何从预赛中获得更精确的结果吗
这是我到目前为止所拥有的
$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;
$pattern=~
\A#字符串的开头
#在前瞻中首先找到最大的模式
#(目的是将尾随数字的大小与最小模式进行比较)
(?=(\d+)\1+(\d*)\z)
#找到最小的图案
(?\d+)\3+
#具有相同或更少尾随数字的
(?!.+\2\z)
#捕获最后的尾随数字
(?=(?\d*))
~x';
if(preg_匹配($pattern,$num,$m))
回显“重复部分:”$m[0]。PHP_EOL
. '模式:'$m['pattern']。PHP_EOL
. '尾随数字:'$m['trailing']。PHP_EOL;
简单的
'/(\d+)\1/'
或'/^(?=.*(\d+)\1)/'
怎么样?你能澄清一下你的编辑吗?我会用preg_match做吗?首先你需要清楚你在寻找什么。例如555555
可以给出5555-5555
或55-55-55
或5-5-5-5-5
。在这种情况下,您想要提取什么模式?使用55555,我需要提取单个数字模式。如果我的号码是7575,我需要2位数字的模式。我也用我的赛前尝试更新了我的问题。为什么5
是单身?那可能是五五,五百五十,等等。这太棒了!非常感谢。