2012-10-26 3 views
0

this question과 유사하지만 약간의 차이점은 있지만 여전히 도움이 필요합니다. 선택 영역에 대한 정규 표현식 구문 분석

현재 내가 가진 : 대시로 분리 된 두 개의 소수를 포함 대괄호 [] 다음 문자의 번호와 일치 내 정규식, 같은

'(.*)\[(\d+\-\d+)\]' 

. 내 문제는 대괄호 사이의 십진수 한 개와 대괄호 사이에 아무 것도없는 숫자로도 일치시키고 싶습니다. 그래서 : 사람이 아마도 다음 단계의 방향으로 내 지점 수

word[-5] = no match 

word[1-5] = match 
word[5] = match 
word[] = match (not essential) 

및 보장한다. 나는 현재 그들과 더 잘되기를 원하지만 추측 게임의 비트가 될 정규 표현식을 찾는다.

+0

당신은 실현 않는 대상 문자열 하 경우 한 줄에 하나 이상의'[dd-dd] 구조체가 있다면, 당신의 표현식은 마지막 문장과 _ 만 일치한다.'(. *)'는 행의 끝까지 행복하게 행진하고 엔진은 다시 역 추적해야한다. 마지막'[dd-dd]를 찾으십시오. 도트 - 스타주의! – ridgerunner

+0

나는이 경우 : 줄 끝의 [dd-dd] 형식이 제거되고 범위를 결정하는 데 사용되며 그 앞에있는 모든 항목, 즉. *) 그룹은 다음으로 간주됩니다. "이름" – PT114

답변

3

는 당신과 함께 가서 ?를 사용

(.*)\[(\d+(-\d+)?)\] 

옵션 마지막 부분을 확인합니다.

잘, 다시

(.*)\[(\d+(-\d+)?)?\] 
        ^here 

동작하는 예제 http://rubular.com/r/t0MaHyHfeS

1

사용 ? 그래서 -\d+에 대한 ?를 사용

를 0 또는 1 경기에 맞게 ?으로 이동하고, 다른 작업을 수행하려면 두 자리 모두로 구분 된 숫자는 -

(.*)\[(\d+(-\d+)?)?\] 

-을 이스케이프 할 필요가 없습니다. 문자 클래스 사이에있는 경우에만 특별한 의미가 있습니다.

0

(.*)\[((\d+(?:\-\d+)?)?)\]

이 ([1-5] 경기) 거기에 심지어 0 자리, 모든 일치하고 당신을 역 참조합니다 :

1 경기 2 ~ 5

0

아니 모든 정규식 통역이 지원하지만 당신은 괄호 안의 부분에 대한 "또는"연산자를 시도해 볼 수도 있습니다 :

'(.*)\[(\d+\-\d+|\d+)\]'