2009-03-25 3 views
1

다음 필드 길이의 헤더가 포함 된 문자열이 있습니다.정규 표현식 수량계의 역 참조

예 : 나는 두 값을 찾을 필요가

fillerfillerCA20 abcdefghijklmnopqrst CA5 zyxwvfillerfiller 

: abcdefghijklmnopqrst 및 zyxwv

나는 정량의 길이를 얻기 위해 역 참조를 사용하는 거라고 :

(?i)ca(?<length>\d+?)\x20.{\k<length>}\x20? 

하지만 분명히 한정 기호에서 역 참조를 사용하는 것은 지원되지 않습니다.

어떻게하면됩니까?

+0

OBTW : "공간"으로 \ x20을 사용할 필요가 없습니다. 그냥 공백 문자를 사용하십시오. – Tomalak

+0

"x"옵션이 켜져 있다고 가정합니다. 맞습니까? 이 예제에서 나는 그것을 켜지 않았다. –

답변

3

한 번에 수행 할 수 없습니다. 정규식은 자체 참조 할 수 없습니다. 그것들은 처음으로 만들어졌고 사용되었습니다. regex가 빌드되면 다시 빌드/기능 보강이 불가능합니다.

길이 정보를 이미 일치시킨 후 두 번째 단계에서 사용하여 일치하는 항목을 평가할 수 있습니다.

선제 논평 : 나는 동일한 문자를 두 번 맞추기 위해 "(.)\1"을 할 수 있음을 알고 있습니다. 이것은 "자기 참조"를 의미하는 것이 아닙니다.

0

더 나은 구문 분석기를 빌드하십시오. CA의 위치를 ​​찾아 다음 숫자 문자를 읽은 다음 숫자 값에 설명 된대로 x 문자를 읽으십시오.