2012-10-01 4 views
1

는 가 정규식 경로 제약

  • Bar
  • FooBar 경기를 일치
  • BarBaz 일치하지 않습니다 http://regexhero.net/tester/

    ^(?!Bar$) 
    
    • Foo 경기
    • 로 테스트
    • FooBarBaz 경기

    경로 제한을 설정할 때 동일한 결과를 얻으려면 ^(?!Bar$).*을 사용해야합니다. 왜 그런가요?

  • 답변

    3

    첫 번째 표현식은 실제로 문자열의 어떤 부분도 '덮어 쓰지 않습니다. 테스트 된 문자열의 특정 위치 (앵커)에서 ^(?!...) 하위 표현식이 일치합니다 (실제로 둘 다 동일한 위치에서 일치하려고 시도하며 처음부터 오른쪽으로 시도하고 즉시 실패합니다).

    그리고 - ^(?!Bar$).* - 실제로 모든 문자열을 '포함'합니다. 나는 그것이 차이라고 생각한다.

    +0

    감사합니다. 테스터의 가능한 문제에 대해 테스터 제작자에게 알렸습니다. – Stijn

    +1

    @Stijn - Raina77ow는 좋은 대답을 가지고 있습니다. Regex Route 제약 조건이 일치 길이가이 동작을 설명하는 문자열 길이와 같은지 확인하기 위해 코드 뒤에 있습니다. 또한 여기에 귀하의 질문에 답변 ... https://wwwatisfaction.com/bucketsoft/topics/regex_route_constraint_with_negative_lookahead_in_mvc_3 –

    +0

    @SteveWortham 귀하의 의견을 보내 주셔서 감사합니다 – Stijn

    관련 문제