2013-08-27 3 views
0

정규식에 약간 문제가 있습니다. 일치하는 항목을 테스트하려고하는데 아무 것도 따르지 않는 경우에만 테스트합니다. 따라서 아래 예제에서 테스트/생성/1/2로 이동하면 여전히 일치합니다. 나는 그것이 명시 적으로 테스트/create/1 인 경우에만 일치시키기를 원합니다 (그러나 동적입니다).정규식 - 일치 단어 아무 것도 따르지 않음

if(preg_match('^test/create/(.*)^', 'test/create/1')): 
    // do something... 
endif; 

나는 나의 구분하기 전에 $를 사용하는 것이 좋습니다 몇 가지 답을 찾았지만 아무것도 나타나지 않습니다. 또는 ^와 $의 조합으로 이해할 수는 없습니다. 정규 표현식은 나 혼란에 빠져있다!

편집 :

난 정말이 충분히 설명하지 않았다, 그래서 그냥 명확히하려면 다음 URL이 생성 /는/{ID} 테스트의 경우 문이 true를 반환하는 경우

내가 필요 -은 { id}는 역동적입니다. {id} 뒤에 슬래시가 오는 경우 if 문은 실패합니다. 그것이 가장 좋은 일을 무엇으로 인해

내가 결국 thedarkwinter의 대답을 갔다 1.

해결 후 슬래시의 실패 - 시험에서 사람의 유형// 1/2 만들 경우 너무 나를 위해, 비록 다른 답변뿐만 아니라 작동 않았다.

가 나는 또한 그것뿐만 아니라 최종 코드는 다음처럼 보였다 있도록 하이픈과 함께 일하는 것이 있는지 확인 정규식에 약간의 추가를 추가했다 : 정규 표현식 다음

if(preg_match('^test/create/[\w-]*$^', 'test/create/1')): 
     // do something... 
endif; 

답변

2

/단어 문자와 일치하고, $는 다음/[워드/NUM] 아무것도를 생성/테스트를 일치 문자열

if(preg_match('^test/create/\w*$^', 'test/create/1')) 

의 끝을 일치 승.

나는 당신이 무엇을 생각합니다.

편집 첫 번째는 나에게 다음과 같은 오류를 제공

3

사용 ($를 사용하여 나타 내기 위해 입력)의 말 :

'|test/create/[^/]+$|' 

당신은 일치 자리를 원하는 경우는, 사용하는 대신 folloiwng (\d 일치 자리 문자) :

'^test/create/\d+$^' 
+0

* 승 \에 * 추가 ​​:^테스트// [^ /] + $^ 두 번째 작품을 만들 수 있지만, 이후에 뭔가있는 경우에도 일치합니다. 더 이상 도움이 될 것입니다. – 0Neji

+0

@ 0 네지, 첫 번째 코드가 수정되었습니다. 두 버전 모두 나를 위해 작동합니다. http://ideone.com/au7iqu를 참조하십시오. – falsetru

0

정규식 abc$은 마지막 문자열 일 때만 abc과 일치합니다.

abcd # no match 
dabC# match 
abC# match 
1

^는 라인의 시작에 대한 앵커^전과 발생 없음, 즉 문자이다. $를 사용하여 문자열의 끝 또는 줄의 끝을 지정하십시오.

편집 :뿐만 아니라 제안을 추가하고 싶었 :

귀하의 솔루션은 괜찮 및 작동하지만이 캐럿 (^) 구분 기호로를 사용에 대해 조언을 줄 스타일의 측면에서 - 특히 네거티브 또는 라인 앵커의 시작으로 특별한 의미를 지니기 때문에 그렇게 읽는 것이 다소 혼란 스럽습니다. 정규 표현식 자체에서 발생하지 않거나 이스케이프되지 않는 한 대부분의 특수 문자를 합법적으로 사용할 수 있습니다. 그냥 스타일/유지 보수 문제에 대해 이야기하고 있습니다.

물론 모든 가능한 구분 기호는 특별한 의미가 있지만 정규 표현식의 시작 부분에^기호가 자주 나타나는 경향이 있으므로 다른 대안을 선택할 수도 있습니다.여기

if(preg_match('#test/create/[\w-]*$#', $mystring)) { 
//etc 
} 
3

당신이 이동 :

"/^test\\/create\\/([^\\/]*)$/" 

이 말한다 : 예를 들어, # 여기 좋은 선택이다 문자열 슬래시 다음에 "테스트"로 시작 (첫 번째 백 슬래시 이스케이프를 기억 두 번째는 PHP가 /에서 정규 표현식으로 이스케이프 처리하는 입력에 백 슬래시를 넣는다.) 다음에 슬래시 뒤에 슬래시가오고 그 다음에 슬래시가 아닌 문자열을 모두 캡처합니다.

코멘트 당신은

내가 항상 정규식 문자로 의미가 없기 때문에, 내가 사용 @, 내가 다른 대답은 ^,이 방법을 사용하여 믿을 본 적이와 ​​함께 시작/내 표현을 선호 자세한 내용을 필요로하는 경우 "문자열의 시작"그래서 나는 그것을 정규식 구분 기호로 사용하지 않을 것이다.

관련 문제