2013-10-14 3 views
0

VBScript 정규식 개체를 사용하여 유효성을 검사하려고하는 데이터 파일이 있습니다.Regex - 시작 및 종료 태그 일치

데이터 :

01THAILAND  000004 
08 000004 05 

정규식 패턴 : ^01.{15}[0-9]{6}|^08 [0-9]{6} [0-9]{2}.

가 어떻게 설정 내 패턴이 첫 번째 줄과 같은 코드 '000004'을 경우 유효한 08를 시작하는 줄을 구문 분석 할 수 있습니까? 이 두 항목 사이에는 다른 데이터 선이 있으며 코드는 항상 '000004'가 아닙니다! 특수하게 남아있는 유일한 것은 2 자의 행 식별자와 형식입니다.

+0

같은 것입니까? 그게 잘 작동하는 것 같습니다. –

답변

0

순수 정규 표현식에 그것을 잘라하지 않습니다,하지만 그건 아마 당신이 어쨌든 사용하고 모자 아니다.

이런 종류의 널리 이름은 "역 참조"라고하며 현재 패턴 자체 내부에 대해 일치되는 정규식의 일부를 포함 할 수있다. sed에서 상속 된 일반적인 구문은 \1이며 정규식의 첫 번째 캡처 괄호를 참조합니다. 당신이 더 이상 하나의 라인에 대한 일치하지 않는 점에 유의 마십시오

^01.{15}\([0-9]{6}\) 
.* 
^08 \1 [0-9]{2}. 

하지만, 전체 그룹 :

그래서 예에서이 같이 보일 것입니다. (한 줄을 맞추기 위해서는 원래의 코드를 기억하고 끝나는 정규식에 명시 적으로 포함시켜야합니다.) 그래서 정규식 엔진이 여러 줄 일치가 가능한지 확인해야합니다.

0

당신은 n은 캡처 그룹의 인덱스 역 참조로 \n를 사용할 수 있습니다. 데모 :

str = "01THAILAND  000004" & vbNewLine & "08 000004 05" 

Set re = new regexp 
re.Pattern = "\d+\w+ +(\d+)\s+\d+ \1 \d+" ' \1 is the back reference 
re.Global = true 

msgbox re.Test(str) 

닌자 편집 : 당신의 패턴은 당신이 이미 가지고있는 문제는 무엇 ^01.{15}([0-9]{6})\s{1,2}08 \1 [0-9]{2}