예전에 제가 구루비에 질문을 한번 올렸던 기억이 있는데..
정규식에서 특정 단어를 제외하는 패턴은 어떻게 가능할지..
명확한 답을 찾지 못 했었던 기억이 있는데요.
오늘 가끔 들르는 카페에 비슷한 질의가 있어서 생각해보니
좀 무식한 방법이긴 합니다만 아래와 같은 방법도 가능하겠더라구요.
질의는
특정 문자열에서 ABC~ZZZ가 처음으로 발견되는 패턴만 삭제하는 것이었습니다.
WITH T AS
(
SELECT 'ABC AAA BBB ZZZ UUUUU ABC DDD ZZZ YYYY' TXT FROM DUAL UNION ALL
SELECT 'ABC AAA BBB ZZZZ UUUUU ABC DDD ZZZ YYYY' TXT FROM DUAL UNION ALL
SELECT 'ABC AAA BBB ZZZZ UUUUU ABC DDD YYYY' TXT FROM DUAL UNION ALL
SELECT 'AB AAA BBB ZZZZ UUUUU ABC DDD YYYY' TXT FROM DUAL
)
SELECT REGEXP_REPLACE(TXT,'ABC([^Z]|Z[^Z]|ZZ[^Z])*ZZZ[^Z]','',1,1) FROM T
제가 생각한 내용은 ABC로 시작하고 ZZZ가 아닌 글자가 반복되다가 ZZZ로 끝나는 패턴이어서 위와 같이 한번 해보았습니다.
[^ABC] 구문은 ABC 단어 제외가 아니라 A나 B나 C를 제외하는 구문이기 때문에
단어 제외의 경우 좀 복잡하지만 위와 같이 사용하는 것도 괜찮을 것 같아요.
혹시 더 좋은 방법이 있다면 공유 부탁드려요^^;