Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中识别重复的数字或数字模式_Php_Regex - Fatal编程技术网

在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
是单身?那可能是五五,五百五十,等等。这太棒了!非常感谢。