2016-07-15 2 views
0

연결을 통해 더 커지는 문자열 변수가 있습니다. 모든 하위 문자열 (모든 루프 반복)의 유효성을 검사해야합니다.단계별 일치 방법

문자열의 마지막 유효한 형식과 일치하는 패턴을 만들었습니다.

문자열의 모든 부분 문자열 (부분 순서이지만 올바른 순서로)을 어떻게 검증 할 수 있습니까?

$pattern = "#\{/?MYTAG(\d*)?\}#i" 
    $myString = '' 

    while (true) { 
    $myString .= $aChar; 

     // { => valid 
     // {m => valid 
     // {my => valid 
     // {myz => invalid break the loop 

     if (preg_match($pattern, $myString)) { 

     } 
    } 

문자를 선택적으로 만들기 위해 ?을 수정하려고했습니다. 하지만 부분 문자열과 일치합니다 :

// {mysdf 
// it matches {my 
// I want to return false, not get the valid part of the string 

이 정보가 도움이되기를 바랍니다.

+0

아마도 당신은 다음과 같은 것을 찾고있을 것입니다 :'while (preg_match ($ pattern, $ myString)) {' – arkascha

+0

@arkascha 내 패턴은 문자열의 마지막 형태와 만 일치하기 때문에 작동하지 않습니다. 즉, 일치하는 경우에만 일치 – giannisf

+2

PHP 정규 표현식은 퍼지/부분 일치를 지원하지 않습니다. 다른 방법을 찾아야합니다. * (예 : 닫는 중괄호를 기다렸다가 패턴을 테스트 할 수 있습니다) * –

답변

1

지금까지 가지고있는 문자열이 유효하지만 정규식 만 최종 문자열과 일치하는지 테스트하려는 경우 최종 문자열의 남은 문자를 추가하고 각 반복에 대해 테스트하지 않는 이유는 무엇입니까?

현재 문자열이 "my"이고 "mytag"를 검색하는 경우 "mytag".substring (2)을 "my"에 연결하여 최종 문자열을 만듭니다. 정규 표현식이 연결된 문자열과 일치하면 지금까지 가지고있는 문자열을 알 수 있습니다.

거기에있는 특정 하위 문자열() 함수를 무시하십시오. 이것은 단지 의사 코드 일뿐입니다.

$pattern = "#\{/?MYTAG(\d*)?\}#i"; 
$myString = ''; 
$counter = 0; 
$finalString = "MYTAG"; 

while (true) { 
$myString .= $aChar; 

    // { => valid 
    // {m => valid 
    // {my => valid 
    // {myz => invalid break the loop 

    if (preg_match($pattern, $myString . $finalString.substring($counter + 1))) { 

    } 
    $counter++; 
} 

주요 단점은 당신이 만약이 유일한 작품이다 : - (나는 실제로 사라하지 않은 그것을 보았다 PHP의 실제 문자열 방법을 사용하지 않는) 여기

은보다 완벽한 예제 미리 최종 문자열을 알고 있지만 그렇게하는 것처럼 보입니다. 그러나 이것 이외의 좋은 작은 해결 방법으로 봉사 할 수 있습니다. 다시 말하자면, 사용 된 특정 부분 문자열 함수는 가상 코드입니다. PHP 하위 문자열 함수를 실제로 찾지는 못했지만 실제로 존재합니다.

편집 : 죄송합니다. 게시하기 전에 @ arkascha 님의 댓글을 볼 수 없습니다. 이것은 그들이 말하는 것에 대한 예입니다.

관련 문제