2012-07-13 2 views
4

사람이 어떻게 정규식에 1-17 사이의 숫자와 일치하는 말해 줄 수 :정규식 번호 범위 1-17

을 해봤 [1-9] | 1 [0-7]하지만 8 일치 예를 들어 첫 번째 부분 때문에 18.

아이디어가 있으십니까? 나는 선도 0을 갖고 싶지 않습니다.

편집 :

문제는 내가 영국의 우편 번호와 함께 시작하려면 검증하기 위해 노력하고있다

:

KW1-17 (이 KW17까지 KW1, KW2 수) ...이 외적 부분 일뿐입니다. 우편 번호는 KW15 1BM 또는 KW151BM 일 수 있으므로 전체 문자열과 일치시키기 위해 앵커를 사용할 수는 없습니다 ... 더 복잡해집니다.

+0

이 당신을 도울지도 모른다 : http://stackoverflow.com/questions/164979/uk-postcode-regex-comprehensive – 03Usr

답변

10

당신은 정규식 주위에 앵커를 둘 필요가 있거나 문자열을 일치 :

^(?:[2-9]|1[0-7]?)$ 

을 나는 또한 좀 더 효율적으로 당신의 정규식을 만들기 위해 자유를 촬영했습니다 :

Comparison of two regexes

+0

나는 이것이 어떻게 더 효율적인지 궁금하다. 이것을 결정하기 위해 어떤 실험을 했습니까? – AlanFoster

+0

@AlanFoster : 숫자 10-17의 역 추적을 피합니다. 원래 정규식에서 교번의 첫 번째 부분은 1과 일치 할 것이고 '$'는 일치 할 수 없기 때문에 일치가 실패합니다. 따라서 엔진은 성공하기 위해 교대의 두 번째 부분으로 되돌아 가야합니다. 첫 번째 부분에서 '1'을 제거하면 더 이상 되돌릴 필요가 없습니다. –

+0

@AlanFoster : 이것을 시각화하기 위해 RegexBuddy 디버깅 스크린 샷을 추가했습니다. –