2013-05-09 1 views
0

PHP의 preg_match를 사용하여 URL 형식을 테스트하고 싶습니다. URL은 다음과 같습니다URL의 특정 패턴을 preg_match하는 방법은 무엇입니까?

if (preg_match("/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/[.]+[.html]$", $_SERVER['REQUEST_URI'])) : 
    echo "match"; 
endif; 

을하지만 뭔가 확실히 옳지 않아 : 내가 얻으려고

/2013/09/05/item-01.html 

이 작동 할 수 있습니다. 어떤 아이디어?

+0

** "옳지 않다"는 것은 무엇을 의미합니까? ** "적절치 못한 부분"은 우리가 문제를 이해하기에 부적절한 설명입니다. 당신이 그것을 시도했을 때 무슨 일이 일어 났습니까? 잘못된 결과를 얻었습니까? * 결과가 없습니까? 결과가 정확하지 않은 경우 무엇이 잘못 되었습니까? 대신에 당신은 무엇을 기대 했습니까? * 정확한 결과를 얻었습니까? 그렇다면 그들은 무엇입니까? 우리를 추측하지 마십시오. –

+0

죄송합니다. "옳지 않다"는 말은 일치하지 않는 것을 의미했지만, 나는 가깝다고 느꼈다. – user2366298

답변

0

시도 :

if (preg_match('!\d{4}/\d{2}/\d{2}/.*\.html$!', $_SERVER['REQUEST_URI'])) { 
    echo 'match'; 
} 

\d[0-9]에 대한 짧고 당신이 슬래시를 일치하려고 할 때 정규 표현식을 더 읽을 수 있도록 (I이 경우 사용!) 다른 시작/끝 구분 기호를 사용할 수 있습니다.

+0

위대한 작품입니다. 감사합니다! – user2366298

0
당신이, 당신이 무엇을 거의 올 것 같습니다

당신이 당신의 마지막 "/"를 page.html 전에

  • 누출되어 깜빡 몇 가지 사소한 문제

    1. 이 있지만 [합니다.] + [^.] +이어야하며, 1 개 이상의 기간을 찾고 있지 않다면, 기간이 아닌 것을 찾고있는 것입니다.
    2. 당신은 오히려 [] HTML을 일치하도록 사용되지만 야해
    3. () 또는 모든
     
    if (preg_match("/([0-9]{4})\/([0-9]{2})\/([0-9]{2})\/([^.]+.html)$", $_SERVER['REQUEST_URI'])) : 
        echo "match"; 
    endif; 
    

    에서 아무것도 또한 당신은 아마)을 (사용할 때 배워야한다, 다음이 있는지 확인하는 데 사용됩니다 당신은 그 안에 들어있는 것을 저장하고 있습니다. 귀하의 경우에는 파일까지 모든 디렉토리를 저장하고 싶은지 확실하지 않습니다.

  • +0

    해결책을 게시하고 명확한 설명을 보내 주셔서 감사합니다. – user2366298

    0

    내 생각에 파일 경로에 대한 작업 표현식을 갖고 있으며 파일 이름 부분을 추가하려고하면 작동이 멈췄습니다.

    preg_match()에는 구분 기호 쌍을 지정해야합니다. 표현의 각 끝에 하나씩. 당신은 이것들을 가지고있는 것처럼 보입니다, 그러나 여러분은 구분 기호의 바깥 쪽 바깥쪽에 표현식의 여분의 비트 (즉, 파일 이름)를 넣었습니다. 이것은 유효하지 않습니다.

    "/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/[.]+[.html]$" 
    ^        ^
    your start delimiter    your end delimiter 
    

    당신은 그 안에 수 있도록 최종 분리 한 후 현재 식 코드 [.]+[.html]$를 이동해야합니다.

    이렇게하면 문제가 해결됩니다.

    관련 문제