我想检查一个数字在数字末尾是否出现一定次数,比如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).'}$)/';
答案 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/';