php
  • regex
  • 2010-02-16 5 views 1 likes 
    1
    $subject = "SPRINT-1.csv"; 
    $pattern = '/^[a-zA-Z]\-[0-9]\.(csv)+$/'; 
    if(preg_match($pattern, $subject)) { 
    echo "Match"; 
    } else { 
    echo "NOPE"; 
    } 
    

    또는PHP 정규 표현식이 모두 실패하는 이유는 무엇입니까?

    $subject = "SPRINT-1.csv"; 
    $pattern = '/^\w\-\.(csv)+$/'; 
    if(preg_match($pattern, $subject)) { 
    echo "Match"; 
    } else { 
    echo "NOPE"; 
    } 
    
    +0

    또한 Expresso는 정규 표현식을 작성하고 이해하고 테스트하기위한 훌륭한 도구입니다 – CaffGeek

    답변

    5

    문자 클래스 […]는 하나 개의 단일 문자를 설명 않습니다. 따라서 [a-zA-Z]a - z, A - Z 중에서 한 문자를 설명합니다. \w (문자 클래스이기도 함)에도 동일하게 적용됩니다.

    • ? : 0 또는 1 반복
    • * :

      당신은 같은 그 문자 클래스에서 문자가 나타날 수 있습니다 양을 설명하는 것을 잊었다 0 개 이상 반복
    • + : 하나 이상의 반복
    0
    <? 
    $subject = "SPRINT-1.csv"; 
    $pattern = '/^[a-zA-Z]*\-[0-9]\.csv?$/'; 
    if(preg_match($pattern, $subject)) { 
    echo "Match"; 
    } else { 
    echo "NOPE"; 
    } 
    ?> 
    
    1

    '/^[a-zA-Z]\-[0-9]\.(csv)+$/'; 당신이 한정사를 놓치고, 그것은 [a-zA-Z]+ 또는 [a-zA-Z]*해야합니다.

    신속하게 정규 표현식을 최적화하려면 http://www.regexp.net/을 사용해보세요.

    0

    당신이 중 하나를 수행 할 수 있습니다

    preg_match_all('/^[a-zA-Z]+\-[0-9]\.csv$/i', 'SPRINT-1.csv', $result); 
    

    또는 둘 경우

    preg_match_all('/^\w+\-\d\.csv+$/i', 'SPRINT-1.csv', $result); 
    

    , 당신은 두 번째 경우에, "SPRINT"를 일치하는 문자 전에 "+"잊고, 당신은 잊었 "1"에 일치하는 수.

    그런데 패턴 끝 부분에 "+"가없고 csv 주위에()가 필요하지 않습니다.

    하지만 완전한 질문을 위해 노력하십시오. 그런 코드를 게시하는 것은 이해하기가 쉽지 않습니다.

    마지막으로 정규 표현식을 테스트하려면 good tool을 사용하십시오.

    관련 문제