2010-08-20 9 views
6

19740103-0379 또는 197401030379와 같은 문자열을 일치 시키려합니다. 즉, 대시는 옵션입니다. 정규 표현식으로 어떻게 이것을 수행 할 수 있습니까?정규식 패턴 선택 문자

+0

사용중인 언어 및/또는 regex 라이브러리를 지정하십시오. – reinierpost

+1

[0-9] {8} -? [0-9] {4} – Ragnis

답변

7

일반적으로 -? 만 사용할 수 있습니다. 또는 -{0,1}을 사용할 수 있지만 "0 또는 1 회 발생"에 대한 ?은 거의 모든 곳에서 지원됩니다. 기본적으로 0 개 이상의 대시 (12 개) 사건 뒤에

-*([0-9]-*){12} 

: 당신이 어디에서 대시의 번호 12 개 자리를 수락 할 경우

pax> echo 19740103-0379 | egrep '19740103\-?0379' 
19740103-0379 

pax> echo 197401030379 | egrep '19740103\-?0379' 
197401030379 

, 당신이 그런 짓을해야 할 수도 있습니다 (숫자는 0 개 이상의 대시 다음)과 같은 놀라운 일들의 모든 종류의 캡처 :

--3-53453---34-4534--- 

(물론, 당신은 \d를 사용하는 대신 0,123,946한다 귀하의 정규식 엔진이 지원하는 경우). 대시 - -

\d*

\d*-\d*이 형식 숫자의 문자열을 일치하는 경우에만 숫자로 이루어진 문자열과 일치

[0-9\-]*는 대시로 구성된 문자열과 일치하는 숫자와 :

+2

문자 클래스 ('[...])에서'-' 만 이스케이프하면됩니다. 대시는 정규 표현식의 다른 곳에서는 특별한 의미가 없습니다. – Richard

+0

전화가 좋음, @ 리차드, 수정 됨. – paxdiablo

1

당신은 다른 사람을 시도 할 수 숫자

| (또는)을 통해 결합 할 수 있으므로 예 : (\d*)|(\d*-\d*) : 형식이 일치합니다. 자릿수 및 숫자 - 대시 - 숫자.