공든탑앱 열기

정규 표현식

SQLD (SQL 개발자) · Top N·계층형 질의·PIVOT·정규 표현식 · 약 15분

쉽게 말하면

정규 표현식은 글자의 생김새를 기호로 적는 규칙이에요. '숫자로만 된', '@가 들어간', '세 자리에서 네 자리' 같은 조건을 정밀하게 검사해요. LIKE가 '010으로 시작'만 볼 수 있다면, 정규 표현식은 '010-숫자 네 자리-숫자 네 자리'까지 검사할 수 있어요.

시험용 정의

정규 표현식은 문자열의 모양(패턴)을 기호로 적는 방법이다. LIKE의 %와 _보다 훨씬 정밀하게 "숫자로만", "@가 들어간", "3~4자리" 같은 규칙을 표현한다. Oracle은 REGEXP_LIKE(맞는지, 조건), REGEXP_REPLACE(바꾸기), REGEXP_SUBSTR(꺼내기), REGEXP_INSTR(위치), REGEXP_COUNT(개수)를 제공한다.

비유로 이해하기

주민센터 서류 검사 도장이다. LIKE는 "010으로 시작하면 통과" 정도만 보지만, 정규 표현식은 "010-네 자리-네 자리, 숫자만"처럼 칸마다 규칙을 정해 검사한다.

자세히

먼저 알아 둘 말

말뜻
메타문자글자 그대로가 아니라 규칙을 뜻하는 특수 기호. . * + ? ^ $ [ ] ( ) |
수량자앞 글자가 몇 번 나오는지: * + ? {n} {n,m}
POSIX 문자 클래스[:digit:]처럼 이름으로 쓴 문자 묶음. 대괄호 안에 [[:digit:]]로 쓴다
MEMBER이 페이지의 연습용 표. ID, NAME, PHONE, EMAIL

메타문자

기호뜻예
.아무 문자 한 개a.c → abc, a1c
*앞 문자 0번 이상ab* → a, ab, abb
+앞 문자 1번 이상ab+ → ab, abb
?앞 문자 0~1번colou?r → color, colour
{n} {n,} {n,m}정확히 n번 / n번 이상 / n~m번[0-9]{3,4}
^ / $문자열 시작 / 끝^010, com$
[abc] / [^abc]괄호 안 한 글자 / 괄호 안 글자 제외[^@]+ → @가 아닌 글자들
a|ba 또는 b^(K|L)
( )묶기, 하위 표현식. REPLACE에서 \1로 다시 쓴다(\d{3})-(\d{4})
\d \w \s숫자 / 영문·숫자·_ / 공백 (Perl 확장)\d+

POSIX 문자 클래스

클래스뜻
[:digit:]숫자 (\d)
[:alpha:]영문자
[:alnum:]영문자와 숫자
[:upper:] / [:lower:]대문자 / 소문자
[:space:]공백 문자
[:punct:]구두점

함수

함수돌려주는 것예와 결과
REGEXP_LIKE(s, p)맞으면 참 (WHERE 조건으로)REGEXP_LIKE(phone, '^010')
REGEXP_REPLACE(s, p, r)맞는 부분을 r로 바꾼 문자열REGEXP_REPLACE('a1b2', '[0-9]', '') → ab
REGEXP_SUBSTR(s, p, 시작, n번째)n번째로 맞는 부분REGEXP_SUBSTR('kim@test.com', '[^@]+', 1, 2) → test.com
REGEXP_INSTR(s, p)맞는 부분의 시작 위치 (없으면 0)REGEXP_INSTR('abc123', '[0-9]') → 4
REGEXP_COUNT(s, p)맞는 횟수REGEXP_COUNT('banana', 'a') → 3

옵션 (마지막 인수)

'i' 대소문자 무시, 'c' 대소문자 구분(기본), 'n' 마침표가 줄바꿈도 매칭, 'm' 여러 줄 모드. 예: REGEXP_LIKE(name, '^k', 'i') → Kim, kim 모두.

시험에 이렇게 나와요

출제 범위·공식 안내 기반 (2024 신설)

확인 문제

Q1. 정규 표현식 '^[0-9]{3}-[0-9]{4}-[0-9]{4}$'에 맞는 문자열은?

  1. a010-1234-5678
  2. 010-1234-5678
  3. 01012345678
  4. 010-123-5678
정답 보기

2번 010-1234-5678

^는 시작, $는 끝, [0-9]{3}는 숫자 정확히 3개다. 숫자 3개-4개-4개가 처음부터 끝까지 이어진 것만 맞는다.

Q2. REGEXP_SUBSTR('2026-11-14', '[0-9]+', 1, 2)의 결과는?

  1. NULL
  2. 14
  3. 11
  4. 2026
정답 보기

3번 11

숫자 덩어리 중 두 번째 → 11.

Q3. REGEXP_COUNT('a1b22c333', '[0-9]+')의 결과는?

  1. 1
  2. 3
  3. 6
  4. 9
정답 보기

2번 3

숫자 1개 이상 덩어리: 1, 22, 333 → 3번.

Q4. 패턴 '^ab*c$'에 맞지 않는 것은?

  1. abbbc
  2. abcd
  3. ac
  4. abc
정답 보기

2번 abcd

b*는 b가 0번 이상. $로 c에서 끝나야 하므로 abcd는 안 된다.

Q5. LIKE 'K%'와 같은 뜻의 정규 표현식 조건은?

  1. REGEXP_LIKE(s, '^K')
  2. REGEXP_LIKE(s, 'K')
  3. REGEXP_LIKE(s, 'K*')
  4. REGEXP_LIKE(s, 'K$')
정답 보기

1번 REGEXP_LIKE(s, '^K')

^K는 K로 시작. 'K'만 쓰면 어디든 K가 있으면 맞는다.

헷갈리기 쉬운 O·X

정규 표현식의 *는 '아무 글자 여러 개'를 뜻한다.

정답 보기

X *는 앞 글자의 0번 이상 반복이다. 아무 글자 여러 개는 .*.

REGEXP_LIKE는 SELECT 절이 아니라 WHERE 같은 조건 자리에 쓰는 함수다.

정답 보기

O 참·거짓을 돌려주는 조건 함수다.

[^0-9]는 숫자로 시작하는 문자열을 뜻한다.

정답 보기

X 대괄호 안의 ^는 '제외'. 숫자가 아닌 한 글자다. 시작을 뜻하는 ^는 대괄호 밖.

함께 보면 좋은 개념