2012-05-18 3 views
0

문자열이 2 ~ 3 자일 수있는 정규 표현식을 작성하고 있습니다. 첫 번째 문자는 A와 H 사이의 알파벳이어야합니다 (대문자). 이 문자는 내가일치하는 문자 다음에 특정 숫자 범위

[A-H]{1}[1-12]{1,2} 

내가 A12을 키 입력 할 때하지만 난

A6 제안하십시오 키 입력하지 않을 경우이 괜찮 쓴 1 ~ 12의 숫자 다음에해야합니다. 이 문자의 범위로 구현되어 있기 때문에

답변

3

만 중 하나 1 또는 2 일치하는 것이다, 그래서 [1-12][12]에 해당, 같은 숫자의 범위를 지정할 수 없습니다. 대신, 다음을 시도해보십시오 : 원래 정규식에 [A-H]{1}이 불필요하다고

[A-H]  # one letter from A to H 
(?:   # start non-capturing group 
    1[012]  # 1 followed by 0, 1, or 2 (10, 11, 12) 
    |   # OR 
    [1-9]  # one digit from 1 to 9 
)   # end non-capturing group 

주, [A-H]{1}[A-H]은 동일합니다 : 여기

[A-H](?:1[012]|[1-9]) 

는 설명이다.

정규식에 앵커를 추가하는 것이 좋을 수도 있습니다. 그렇지 않으면 A20과 같은 문자열에서도 부분 일치가 발생합니다. 그것은 더 큰 텍스트 내에있는 경우 대신 단어 경계를 사용할 수

\A[A-H](?:1[012]|[1-9])\z 

: 당신이 전체 문자열과 일치하려고하는 경우에 당신은 다음을 사용한다

여기
\b[A-H](?:1[012]|[1-9])\b 
+0

감사합니다. A12는이 경우 부분 일치입니다. A1 만 일치합니다. http://rubular.com/r/EQmL27ZTAH – Ank

+0

@Ankur - 방금 교대 명령이 바뀌 었으니 지금 올바르게 작동해야합니다. 정규식에 앵커를 추가하는 것을 고려할 수도 있습니다. 그렇지 않으면'A20'과 같은 문자열에서도 부분 일치를 얻을 수 있습니다. 전체 문자열과 일치 시키려고한다면'\ A [AH] (?: 1 [012] | [1-9]) \ z'를 사용하거나 더 큰 텍스트 단어 안에 있으면 경계가 도움이 될 수 있습니다 : '\ b [AH] (?: 1 [012] | [1-9]) \ b' –

+0

고마워. – Ank

1

당신이 이동 :

^[A-H]([1-9]|1[0-2])$ 

질문에 {1}을 (를) 사용할 필요가 없습니다.

정규식은^및 $로 고정되어 있으므로 줄의 유일한 것일 수 있습니다. 예를 들어 A60과 일치하지 않습니다.

+0

이것은 (예를 들어)'A90' 또는'A22'를 허용하기 때문에 지나치게 관용입니다. – Phrogz

+0

@Phrogz 감사, 정규식을 업데이트했습니다. – buckley

관련 문제