by 동동동 [Oracle 기초] oracle 정규표현식 [2021.10.21 09:35:17]
안녕하세요..마농님 답변을 참고 하여 밤새 해보고 있는데..어렵네요..ㅠㅠ
WITH TMP AS ( SELECT '방송사별 유명 MC는 MBC는 (유재석) KBS는 (강호동) 이 있고 개인적으로 (신동엽)도 좋아한다.' TXT FROM DUAL ) SELECT REGEXP_SUBSTR(TXT, '\(.+?\)') AS REX1 , REGEXP_SUBSTR(TXT, '\(.+\)') AS REX2 , REGEXP_REPLACE(txt, '\(.+?\)', '') , REGEXP_REPLACE(txt, '[^\(.+\)]', '') FROM TMP ;
위의 데이터 에서 괄호안의 데이터를 가져오려고 하는데요..
결과 |
(유재석)(강호동)(신동엽) |
또는
결과 |
유재석,강호동,신동엽 |
과 같은 결과 값을 얻고 싶습니다..정규표현식..어렵네요...ㅠㅠ
===============================
질문을 올리고 이전 마농님 답변을 참고로 어찌 하다보니 답을 얻었는데요...
WITH TMP AS ( SELECT '방송사별 유명 MC는 MBC는 (유재석) KBS는 (강호동) 이 있고 개인적으로 (신동엽)도 좋아한다.' TXT FROM DUAL ) SELECT REGEXP_REPLACE(txt, '(\(.+?\))|.', '\1') FROM TMP ;
저 뒤에 |. (=또는 문자 하나) 의 의미가 어떻게 해석 되는 건지 알 수 있을까요??
REGEXP_REPLACE(txt, '(\([^)]+\))|.', '\1') 에 대한 설명
1. \([^)]+\) : 괄호로 감싸진 문자열 -> 시작괄호 다음에 종료괄호가 아닌 문자가 쭈욱 오다가 종료괄호로 끝남
2. (\([^)]+\)) : \1 에 대응시키기 위해 괄호로 감쌈.
3. |. : 또는 다른 문자 즉 괄호로 감싼 문자 이외의 문자를 의미
4. \1 : 첫번째 괄호를 의미하는데
- 1번(괄호로 감싸진 문자열) 이 선택된 경우에는 자기 자신 그대로가 되고
- 3번(이외의 문자) 이 선택된 경우에는 해당되는 괄호가 없으므로 빈 문자열이 됨