위와 같이 test_emp 테이블에서 원하는 EMPNO를 선택하여,
select *
from test_emp
where in ( ... )
select 쿼리문을 만들다 보면, EMPNO 컬럼을 드래그 복사해서 where in ( 7369, 7499 ...)
이렇게 한번에 넣고 싶을때가 많다.
다음과 같이 쿼리문을 작성하여 실행하면, 편하게 쿼리문을 작성할 수 있다.
이건 누구나 다 아는 내용이다.라고 생각하시는 분들을 위해서 이제부터 본격적으로 정규식을 써 보겠습니다.
게다가 정규식은 보이지도 않는데 어떻게 된것이냐?
위와 같이 선택된 값을 다음과 같은 쿼리문으로 만들려고 합니다.
select *
from test_emp
where
OR ( JOB = 'CLERK' AND EMPNO = '7369' )
OR ( JOB = 'CLERK' AND EMPNO = '7900' )
OR ( JOB = 'MANAGER' AND EMPNO = '7698' )
OR ( JOB = 'SALESMAN' AND EMPNO = '7654' )
이렇게 쿼리를 만들고 where 다음의 OR 글자만 지워주면 됩니다. 아래의 정규표현식을 실행해볼까요?
와우! 정말 한번에 원하는 쿼리와 근접하게 변환되었습니다.
여기까지 잘 따라오셨나요?
이쯤에서 위에서 쓰인 정규표현식을 설명하고 넘어가기로 하죠.
위에서 빨간색 네모로 표시된 정규식은 다음과 같습니다.
^(\w+)\t(\d+)
^ : 한 줄의 시작부분을 의미합니다. ^이 없으면, 한 줄의 중간 부분에서도 정규식 패턴이 발견되면, 해당 문자열을 찾아냅니다.
() : 괄호로 묶은 곳이 2군데가 있는데요.
괄호로 문장을 묶으면 해당 문자열을 그룹으로 치환할 수 있습니다.
이 부분은 아래에서 더 자세히 설명드리죠.
\w : 알파벳으로 이루어진 한 문자를 찾습니다. (a~z, A~Z) 사이의 문자를 말하는거죠.
\t : 탭으로 띄어쓰기된 공간을 찾습니다.
\d : 숫자로 이루어진 한 문자를 찾습니다. (0~9) 사이의 문자를 찾습니다.
+ : 바로 앞의 문자가 1번이상 계속 반복되는 것을 말합니다.
해석하면,
1. 한 줄의 시작부분이 (\w+) 알파벳으로 연속된 문자열을 찾아서 그룹으로 묶는다.
2. \t 탭으로 띄어쓰기된 공간을 찾는다.
3. (\d+) 숫자로 연속된 문자열을 찾아서 그룹으로 묶는다.
여기까지 이해 가셨나요? 그렇다면 바꿀 문자(파란 네모안의 정규식)에 해당하는 정규식을 살펴 보기로 하죠.
OR ( JOB = '\1' AND EMPNO = '\2' )
여기에서는 중요한 포인트가 바로 \1 과 \2 입니다.\1 : 찾을 문자(빨간 네모안의 정규식)에서 첫번째로 그룹화된 문장을 이 부분에 끼워넣기 한다.
\2 : 찾을 문자(빨간 네모안의 정규식)에서 두번째로 그룹화된 문장을 이 부분에 끼워넣기 한다.
자 이제 이해가 가셨나요?
정규표현식으로 다양한 문자 치환 방법이 있는데요. 그중에서 자주 쓰이는 그룹 치환에 대해서 알아 보았습니다.
이처럼 정규표현식을 활용하면, 다양하고 복잡한 문자열을 손쉽게 바꿀 수 있습니다.
TIP.
Tab으로 띄어진 문자열을 구분하기 위해서는 다음의 정규식으로 검색한 후 치환하세요.
^(\d+|\w+)\t(\d+|\w+)\t(\d+|\w+)
덧글을 달아 주세요