2011-12-17 2 views
0

숫자 끝에 숫자가 몇 번 나타나는지, 예를 들어 2 번 나타나는지 확인하고 싶습니다. 정규식은 아마도 "group [0-9] 2 회 끝에"와 같은 말을해야하고, PHP 변수를 정규 표현식에 삽입하여 '반복 횟수'를 나타내는 2를 대체 할 수 있습니다.숫자 끝에 숫자가 반복되는지 확인 하시겠습니까?

정규 표현식 사용해야합니까?

P.S : 어떤 자리 숫자의 끝에 2 회 반복되어 있는지 확인한다 발현이 올바른 경우 바라기 PHP code의 단편이 확인할 수 있도록 할 수있다.

$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).'}$)/'; 

답변

2

그것을 작동합니다 :

$Regex="/(^|.)(^|(?!\\1))(.)\\3$/"; 
통과 모든 테스트 케이스 :

+0

와우, 확실히 인상적입니다! 나는 아직도 "죄송합니다. 123455를 위해 일하지 않습니다." 그리고 "미안, 99를 위해 일하지 않는다." 그래, 그것을 사용하는 경우, 그래, 흠 .. – Chris

+0

그게 당신이 테스트 사이트에서 "및 \, 내가 내 자신의 컴퓨터 에서이 코드를 실행하기 때문에 PHP는 cli를 사용하여 정답을 얻고, 당신은"에 변경해야합니다 (예 :'$ Regex = '/ (^ |.) (^ | (?! \\ 1)) (.) \\ 3 $ /';' 사이트.) –

+0

당신이 그것에 관해 어떻게 알았는지 실마리가 아니라, 당신 말이 맞다! 아름답게 일하고, 정말 고마워! – Chris

-1

이 정규 표현식 문자열의 끝에있는 캐치 2 개 이상의 구 년대 :

9{2,}\Z 

9 개는 무슨이다 look for, {2,}는 "두 번 이상"을 의미하고 \ Z는 문자열의 끝 부분 만 보도록 지시합니다.

어쩌면 시작하는 데 도움이 될 것입니다. 같은

이 구체적으로 보일 것이다

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

이 하나 개의 요소를 가진 배열 $ 일치를 인쇄해야합니다 즉 검색 식을 한 번 발견되었다.

그리고 당신이 어떤 한 자리 숫자에 대해 테스트하는대로 숫자 범위를 사용하십시오 테스트 케이스의 표현 사용하기 : 몇 번을 시도하고 마침내 얻을

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

시도했지만 [0-9] {2} \ Z가 아니 었습니다. 뭐가 잘못 됐는지 설명해 주시겠습니까? – Chris

+0

엔딩의 두 문자가 모두 [0-9]와 일치한다는 것을 보장하기 때문에 모든 테스트 사례에서 그렇습니다. –

1

당신이 하나를 시도 할 수 있습니다, 그것은

를 분석하는 간단하고 쉽습니다
$Regex='/(?:^(\\d)\\1$)|(?:^.*(\\d)(?!\\2{2})(\\d)\\3$)/'; 

그러나이 코드는 귀하가 제공 한 사이트 (http://writecodeonline.com/php/) 전용입니다. 불행히도 원래의 정규 표현식은

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

좋아, 어떤 식 으로든 내가 2, 3, 4, 5 또는 그 이상의 반복을 찾도록 변경해야합니까? {2}를 변경해야합니까? (편집 : 그냥 일을 시도, 작동하지 않았다) – Chris

+0

당신이 대신이 하나 필요 : (? :^(\ d) \ 1 {1} $) | (? : ^. * (\ d) (?! \ 2 {2}) (\ d) \ 3 {2} $), 숫자는 {}로 바꿔야합니다. – freefcw

+0

어느 것입니까? 후에는 아무 것도 없습니다. – Chris

관련 문제