2013-06-30 2 views
1

정규식 PHP 코드

// If url matches regex 
      $regex = "/^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ /-]+.[A-z]{2,4}$/"; 
     if (preg_match($regex, $this->value)) { 

      $this->valid(); 
     } 

오류 메시지

Warning: preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Unknown modifier 'p' in C:\Apache\www\profiletwist\lib\php\form\url.php on line 41 
Call Stack 
# Time Memory Function Location 
1 0.0079 440016 {main}() ..\new.php:0 
2 0.0964 667832 form->validate() ..\new.php:60 
3 0.0968 668248 form_URL->validateUploadURL() ..\form.php:372 
4 0.0969 668400 preg_match () ..\url.php:41 
Variables in local scope (#3) 

$regex = 



string '/^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ /-]+.[A-z]{2,4}$/' (length=79) 

질문

나는이 "알 수없는 수정"오류에 대한 정규식을 수정하려면 어떻게 발생하지합니다 ?PHP 정규식 "알 수없는 수정 페이지"

"/upload/temporary/####_##_##_[A-z0-9 _-]+ "." [a-z]{3} 

이 파일 이름 대상 :

궁극적으로, 나는 텍스트 입력이 일치하는지 확인합니다 정규식을하고 싶습니다. 시작 부분은 변경되지 않고 마지막 부분은 임의의 해시 다음에 임의 확장자가 올 수 있습니다. 추가 처리는 정규 표현식 후에 수행되지만 이것은 첫 번째 테스트입니다.

감사합니다. 당신은 예를 /에 대한 구분 기호를 사용하는 경우 정규식 엔진은 패턴의 끝이라고 생각 otherwhise

+0

그리고 [100 개 중복 (어쩌면있다 http://stackoverflow.com/search?page=3&tab=newest&q=%5bphp%5d%20%5bregex % 5d % 20is % 3aquestion % 20closed % 3ano % 20unknown % 20modifier). 기본적으로 다른 구분 기호를 사용하거나 (가장 좋은 방법은) [**'preg_quote()'**] (http://php.net/preg-quote)를 사용하십시오. – HamZa

+0

@HamZa 정규 표현식을 실제로 쓰고 싶을 때 (그리고 방대한 양의 문자 그대로의 텍스트와 일치하는 것이 아니라) 어떻게 가장 좋은 방법입니까? 다른 구분 기호를 선택하는 것이 가장 좋습니다. –

+1

@ProfileTwist, 아무도 대답에 포함시키지 않았으므로 공식 [PHP의 구분 기호에 대한 참조] (http://www.php.net/manual/en/regexp.reference.delimiters.php)를 참조하십시오. –

답변

5

의이 오류를 가지고 u 이후

는 수정과 p는 수정하지 않습니다. 또는 더 나은 :

다른 구분 기호 (를 권장) :

$regex = "#^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ /-]+.[A-z]{2,4}$#"; 

탈출 구분 :

$regex = "/^(\/upload\/temporary\/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ \/-]+.[A-z]{2,4}$/"; 
+0

훌륭한 설명에 감사드립니다. – ProfileTwist

3
$regex = "~^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[\w./-]+\.[a-z]{2,4}$~"; 
, 당신은 당신의 패턴의 모든 litteral / 이스케이프해야 ~

에 구분 기호를 변경

. 당신 때문에 당신이 당신의 구분 기호를 탈출해야 정규식 문자열에서 문자열 /^(/up....

3
구분 기호로 정규식 자체에 표시되지 않는 문자를 사용

앞 슬래시을 이스케이프 처리하거나 다른 구분 기호 (내가)이 경우 !을 사용했습니다 :

$regex = "!^(/upload/temporary/)[0-9]{4}_[0-9]{2}_[0-9]{2}_[A-Za-z0-9._ /-]+.[A-z]{2,4}$!" 
관련 문제