안녕하세요..정규식을 계속 공부 중인데요..
WITH TMP AS ( SELECT '--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-' TXT FROM DUAL ) SELECT REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 1) -- 대괄호 안에 ^이 기 때문에 Not을 의미, 앞이 @이 아닌 문자와 중간에 @이 있거나 없거나 끝이 @인것 , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 2) , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 3) , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 4) , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 5) , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 6) , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 7) FROM TMP ;
REGEXP_SUBSTR 를 해서 몇개가 일치하는지 모르는데..일치한 값을 구분자를 줘서 한번에 전체를 가져올 수 있을까요?
-@구분자-@@구분자-@@구분자-@@구분자-@@구분자-@@
이런 식의 결과를 얻고 싶습니다...도움 부탁드립니다..
문의 내용이 부족해서 죄송합니다...ㅠㅠ
'--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-' 데이터 에서
REGEXP_SUBSTR(TXT, '[^@]@?@') 를 만족하는 전체 자료가
-@
-@@
-@@
-@@
-@@
-@@
총 6개 가 될 수 있는데요...
이걸 구분자를 붙여서 한줄로 가져올 수 있는가 하는 건데요..
질문의 설명이 맞나 모르겠네요..ㅠㅠ
First match:--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-
All matches:--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-
WITH TMP AS ( SELECT '--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-' TXT FROM DUAL ) SELECT REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 1) AS REX1 , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 2) AS REX2 , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 3) AS REX3 , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 4) AS REX4 , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 5) AS REX5 , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 6) AS REX6 , REGEXP_SUBSTR(TXT, '[^@]@?@', 1, 7) AS REX7 FROM TMP ;
를 실행 하면
REX1 | REX2 | REX3 | REX4 | REX5 | REX6 | REX7 |
-@ | -@@ | -@@ | -@@ | -@@ | -@@ |
가 나오는데..실제 조건을 만족하는 자료가 몇개인지 모르기 때문에..
만족하는 전체 자료를 구분자(예: 새미콜롬; )으로 가져오려고 하는데요..
REX_FULL |
-@;-@@;-@@;-@@;-@@;-@@ |
저렇게 REGEXP_SUBSTR 로 하는게 맞는지 아니면 다른 정규식이 있는지 모르겠네요..
답글 감사드립니다...
WITH tmp AS ( SELECT '--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-' txt FROM dual UNION ALL SELECT '--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-@-x' FROM dual ) SELECT txt , SUBSTR(REPLACE(REGEXP_REPLACE(txt, '(-@@?)|.', '\1'), '-', ';-'), 2) x FROM tmp ;
억지로 만들어 보긴 했습니다.
다만. 이게 왜 필요한 걸까요? 상당히 의미 없어 보이는 데요?
다른 최종 결과를 얻기 위한 중간 과정으로 생각하시고 만드는 건가요?
차라리 다른 방안을 찾는게 낫지 않을 런지?