2010-07-31 4 views
0

나는 다음과 같은 패턴을 말해봐 이 패턴을 편집하여 INDICATOR으로 시작하는 문자열의 모든 인스턴스가 공백을 가지면 내부 패턴의 여러 일치를 찾습니다. 예 : 외부 패턴 내에서 내부 패턴을 여러 번 무제한 일치

INDICATOR AA A3 66 B8 34 CD
INDICATOR BG 4D CS
INDICATOR HG

는이 작업을 수행 할 수 있습니까?

INDICATOR((\s+)?([,-])?(\s+)?([a-z0-9]+))+

+0

개선 된 정규 표현식도 'INDICATORXYZ123OU812'와 일치합니다 (대소 문자를 구분하지 않는 일치라고 가정). 당신이 정말로 당신의 의견 중 하나에서 지적한 것처럼'INDICATOR AABB'와 같은 문자열을 일치시키고 싶습니까? 그리고 어쨌든 당신은 어떤 정규식의 맛을 사용하고 있습니까? –

+0

@Alan : 귀하의 코멘트를 방금 알게되었습니다. 예, 당신이 말하는 것처럼 패턴을 일치시키고 싶습니다. 사용하고있는 패턴은 예제보다 약간 복잡하므로 공백이 없도록하는 것이 안전합니다. 입력에 공백이 없으면 패턴이 여전히 선택되었는지 확인하고 싶습니다. – James

답변

2

이 시도 : 여기

INDICATOR(\s+([a-z0-9]+))+ 

반복 패턴을

검보 감사와 솔루션

은 내 요구 사항에 가장 적합한 다음과 같은 정규식 함께했다 그룹으로 묶고 +을 사용하여 계량화하여 하나 또는 그룹 내에서 표현의 반복. 그러나 내부 그룹의 모든 일치 항목을이 항목과 일치시키지 않고 마지막 일치 항목 만 가져올 수 있습니다 (또는 구체적으로 : 사용중인 구현에 따라 다름).

+0

@Gumbo : 기본적으로 전체 문자열과 일치시킬 필요가 있습니다. 그런 다음 내부 정규 표현식을 사용하여 데이터를 다시 구문 분석합니다. 이 초기 정규식은 유효성 검사를위한 것입니다. – James

+0

@James : 그러면 캡쳐 된 문자열을 저장하는 비용을 피하기 위해 "일반"그룹 대신'캡쳐되지 않은 그룹'(? : ...)을 사용하는 것이 좋습니다. – Gumbo

+0

@ Gumbo : 그룹을 반복 할 수있는 문자열을 다시 구문 분석 할 필요가 없다는 이점이 있습니까? – James