2011-02-11 2 views
16
끝내지 않는 URL을 테스트하고 싶습니다 .html

정규식 : 특정 시퀀스로 끝나지 않는 경우에만 일치

이것은 다음과 같은 패턴입니다.

[/\w\.-]+[^\.html$] 

.html에서 끝나지 않으므로 다음과 일치합니다.

/blog/category/subcategory/ 

.html로 끝나기 때문에 일치하지 않습니다. :

/blog/category/subcategory/index.html 

그러나 .ht로 끝나기 때문에 다음과 일치하지 않습니다.가 아니라 .html

/blog/category/subcategory/index.ht 

어떻게 패턴을 변경해야합니까?

+1

어떤 프로그래밍 언어 또는 도구를 사용하고 있습니까? –

답변

33

당신은 부정적인 lookbehind 주장을 사용할 수 있습니다됩니다 :

^[/\w\.-]+(?<!\.html)$ 

당신은 lookbehind 주장을하지 않아도하지만 당신은 당신에게 다음 lookaheads이있는 경우 대신 사용할 수 있습니다

^(?!.*\.html$)[/\w\.-]+$ 

를 온라인으로 작업을 참조하십시오 rubular

+0

@Khnle : 엔진 및 입력 문자열 배포에 따라 달라질 것으로 예상됩니다. –

17

어떤 엔진을 사용하십니까? 이 내다 주장을 지원하는 하나의 경우 다음을 수행 할 수 있습니다 : 우리는 구성 요소로 그것을 깰 경우

/((?!\.html$)[/\w.-])+/ 

, 그것은 다음과 같습니다 :이 의미

(   # start a group for the purposes of repeating 
(?!\.html$) # negative lookahead assertion for the pattern /\.html$/ 
[/\w.-]  # your own pattern for matching a URL character 
)+   # repeat the group 

, 그 모든 문자, 문자를 소비하기 전에 패턴 /.html$/가 여기에 일치하지 않음을 테스트합니다.

시작 부분에 ^으로 전체 패턴을 고정하고 전체 끝에 일치하도록 강제로 끝내려면 $으로 앵커링 할 수도 있습니다. 그렇지 않으면 URL의 일부만 일치시킬 수 있습니다. 이러한 변화와 함께, 당신의 정규식 엔진에서 지원하는 경우

/^((?!\.html$)[/\w.-])+$/