2013-09-27 3 views
2

쉼표로 구분 된 목록에서 문자열 목록을 반환하려고합니다. 그러나 여전히 쉼표를 큰 따옴표로 묶은 문자열로 반환하려고합니다.regexp_substr을 사용하여 쉼표 사이의 단어 선택 (큰 따옴표 제외)

이 내 현재의 성명 :

SELECT 
    regexp_substr('one,two,"three, four five",six,"seven, eight, nine"', 
       '(.*?,){'||(n-1)||'}([^,]*)', 1, 1, '', 2) token 
FROM (SELECT LEVEL n FROM dual CONNECT BY LEVEL <= 10); 

이 반환

one 
two 
"three 
four five" 
six 
"seven 
eight 
nine" 

그러나 나는 반환해야합니다

one 
two 
three, four, five 
six 
seven, eight, nine 

내 정규식 녹슨입니다. 이것을 달성하기 위해 정규식을 수정할 수있는 명확한 방법이 있습니까?

감사합니다.

+0

당신이 정규식을 사용하려는 경우를 이를 위해 필자는 오라클이 AFAIK를 지원하지 않는 긍정적 인 (또는 부정적) 미리보기를 통해서만 가능하다고 생각합니다. – Jerry

답변

2

이 시도 :

'^("[^"]*",|[^",]*,){'||(n-1)||'}("[^"]*"|[^",]*)', 1, 1, '', 2 

또는 간단한 버전 :

'(^|,)("[^"]*"|[^",]*)', 1, n, '', 2 

또는 따옴표가 필요하지 않는 경우 -로 포장 :

regexp_replace(..., '"', '') 
+0

나는 이것이 트릭을했다고 생각한다! – Blair

관련 문제