REGEXP_SUBSTR 의 일치 값을 하나로 가져오기?? 0 8 710

by 동동동 [2021.10.20 12:17:23]


안녕하세요..정규식을 계속 공부 중인데요..

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 를 해서 몇개가 일치하는지 모르는데..일치한 값을 구분자를 줘서 한번에 전체를 가져올 수 있을까요?

-@구분자-@@구분자-@@구분자-@@구분자-@@구분자-@@

이런 식의 결과를 얻고 싶습니다...도움 부탁드립니다..

 

by 마농 [2021.10.20 13:02:16]

질문이 이해가 안가요.


by 동동동 [2021.10.20 13:45:33]

아...옙..

REGEXP_SUBSTR 시 첫번째 일치 값, 두번째 일치 값...이렇게 선언을 해줘야 하는데..

전체 일치 값을 구분자로 구분해서 가져올 수 있는지 해서요...


by 마농 [2021.10.20 13:52:10]

네 그 말이 잘 이해가 안가요.
전체 일치 조건이 뭔지 정확하게 설명해 주세요.
구분자가 뭔지? 전체 문자열이 어떤 규칙인지?
원본 대비 결과가 어떻게 나와야 하는지?


by 동동동 [2021.10.20 14:54:28]

문의 내용이 부족해서 죄송합니다...ㅠㅠ

 

'--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-' 데이터 에서 

REGEXP_SUBSTR(TXT, '[^@]@?@') 를 만족하는 전체 자료가 

-@

-@@

-@@

-@@

-@@

-@@

총 6개 가 될 수 있는데요...

이걸 구분자를 붙여서 한줄로 가져올 수 있는가 하는 건데요..

질문의 설명이 맞나 모르겠네요..ㅠㅠ

 

First match:--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-

All matches:--XX-@-XX-@@-XX-@@@-XX-@@@@-XX-@@-@@-


by 마농 [2021.10.20 15:13:15]

구분자는 -@ 또는 -@@ 인거죠?
구분자는 총 6개인거죠?
원본 대비 결과는 뭔가요?


by 동동동 [2021.10.20 16:01:12]
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 로 하는게 맞는지 아니면 다른 정규식이 있는지 모르겠네요..

답글 감사드립니다...


by 마농 [2021.10.20 16:21:08]
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
;

억지로 만들어 보긴 했습니다.
다만. 이게 왜 필요한 걸까요? 상당히 의미 없어 보이는 데요?
다른 최종 결과를 얻기 위한 중간 과정으로 생각하시고 만드는 건가요?
차라리 다른 방안을 찾는게 낫지 않을 런지?


by 동동동 [2021.10.20 17:10:12]

답변 감사드립니다..

REGEXP_SUBSTR 를 공부하는 중에 조건에 맞는 전체 데이터를 가져오려면 어떻게 해야 하는 궁금증에 문의를 드리게 됬습니다.

 

도움 감사드립니다..^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입