2017-10-09 10 views
0

콜론으로 구분 된 9 개의 값이있는 문자열이 있습니다. 그 문자열에 대해 가능한 구조는 2 가지가 있습니다 :공백 값을 포함하여 콜론 사이의 값을 캡처하는 정규식

value1:value2:value3:value4:value5::value7:value8: 
value1:value2:value3:value4::value6:value7::value9 

나는 이것을 분해하고 각 개별 값을 저장할 수 있어야합니다. 우리는 이런 식으로 생각했습니다.

^(.+)?\:(.+)?\:(.+)?\:(.+)?\:(.+)?(\:\:)(.+)?\:(.+)?(\:\:)$ 

그러나 두 구조 모두 허용하지 않습니다.

어도비 애널리틱스에서 개별 값을 캡처하는 데 사용됩니다.

+0

시도 [ '^ ([^ \ n] *) ([^ \ n] *) ([^ \ n] *) ([^ ([^ : \ n] *) :([^ : \ n] *) :([^ : \ n] *) : \ n] *) $'] (https://regex101.com/r/CRnys1/1). 멀티 라인 컨텐트로 실행하지 않는다면'\ n'을 제거 할 수 있습니다. –

+0

9 개 미만의 값이 허용됩니까? 즉, 'value1 : value2'는 유효한 문자열입니까? –

답변

0

이것은 에 대한 것으로 가정합니다. 분류 규칙 빌더 (CRB). @ Wiktor의 주석 처리 된 답변은 괜찮습니다.하지만 그가 제공 한 정규 표현식에 \n을 포함 할 필요는 없습니다. 그의 정규식이 가정하는 한 가지는 모든 기존 키가 모두 9 개의 값 또는 적어도 자리 표시 자 콜론을 갖습니다. 연습에서의 나의 경험에서 항상 그렇지는 않다. 요구 사항이 변경되었으므로 과거 데이터가 줄어들 수 있습니다.

^([^:]*)(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?(?::([^:]*))?$

이이 값을 $9을 통해 당신에게 $1을 줄 것이다 :

value1:value2:value3:value4:value5:value6:value7:value8:value9

이 당신을 위해 인 경우에, 여기에 약간 수정 @Wiktor 제공 정규식입니다
$1 = value1 
$2 = value2 
$3 = value3 
$4 = value4 
$5 = value5 
$6 = value6 
$7 = value7 
$8 = value8 
$9 = value9 

또는 :: 자리 표시자를 비워 둘 수 있습니다 (예 :

$1 = value1 
$2 = value2 
$3 = 
$4 = value4 
$5 = value5 
$6 = 
$7 = value7 
$8 = value8 
$9 = value9 

value1:value2::value4:value5::value7:value8:value9 그리고 당신은, 예를 들어, 전체 9 값 문자열이없는 경우에는 현재 값과 일치합니다

value1:value2::value4

$1 = value1 
$2 = value2 
$3 = 
$4 = value4