检查数字末尾是否重复任何数字?

时间:2011-12-17 12:54:48

标签: php regex

我想检查一个数字在数字末尾是否出现一定次数,比如2次。正则表达式可能应该说“组[0-9]两次结束”,我可以在正则表达式中插入一个PHP变量,指示'重复次数',替换2。

我应该使用什么正则表达式?

PS:希望PHP code的这段代码可以帮助验证表达式是否正确,该表达式应检查数字末尾是否重复 2 次数。

$Regex="/$[help]$/";
$Input=array(123456,112345,333333,123455,99);
$CorrectOutput=array(0,0,0,1,1);

echo "==WORKING IN EVERY TEST CASE?==<br>";

for($TestEntry=0;$TestEntry<=4;$TestEntry++){
    $Result = preg_match($Regex,$Input[$TestEntry]);
    if($Result==$CorrectOutput[$TestEntry]){
        echo "Got ".$Result.", expected ".$CorrectOutput[$TestEntry]." - Good, seems to be working for " . $Input[$TestEntry] . ".<br>";
    }else{
        echo "Got ".$Result.", expected ".$CorrectOutput[$TestEntry]." - Sorry, not working for " . $Input[$TestEntry] . ".<br>";
    }
} 

提前致谢!

答案很可能是以下内容,非常感谢:

$Repetition = 3; //Number of times a digit repeats at the end of the number (min. 2)
$Regex='/(?:^(\d)\1{'.($Repetition-1).'}$)|(?:^.*(\d)(?!\2{'.$Repetition.'})(\d)\3{'.($Repetition-1).'}$)/';

3 个答案:

答案 0 :(得分:2)

多次尝试并最终让它发挥作用:

$Regex="/(^|.)(^|(?!\\1))(.)\\3$/";

通过了所有测试用例:)

答案 1 :(得分:1)

你可以尝试这个,分析简单易行

$Regex='/(?:^(\\d)\\1$)|(?:^.*(\\d)(?!\\2{2})(\\d)\\3$)/';

但是,此代码仅适用于您提供的网站(http://writecodeonline.com/php/)。原始正则表达式是

(?:^(\d)\1$)|(?:^.*(\d)(?!\2{2})(\d)\3$)

答案 2 :(得分:-1)

此正则表达式在字符串末尾捕获2个或更多9个:

9{2,}\Z

9是要查找的内容,{2,}表示“两次或更多次”,\ Z表示只查看字符串的结尾。

也许这会帮助你开始。

具体如下:

<?php
$subject = "12389798712899";
$pattern = '/9{2,}\Z/';
preg_match($pattern, substr($subject,3), $matches);
print_r($matches);
?>

这应该打印一个包含一个元素的数组$ matches,即找到一次搜索的表达式。

要在测试用例中使用表达式,您将使用数字范围,因为您正在测试任何一位数字:

$Regex='/[0-9]{2,}\Z/';