다음을 통해 공유


정규 표현식

적용 대상: SQL Server 2025(17.x) Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 데이터베이스

이 문서에서는 SQL Server에 대한 정규식을 소개합니다.

정규 표현식, 또는 regex,는 텍스트에 대한 검색 패턴을 정의하는 문자 시퀀스입니다. Regex는 패턴 일치, 데이터 유효성 검사, 데이터 변환 및 쿼리를 비롯한 다양한 작업에 일반적으로 사용됩니다. 복잡한 데이터 작업을 검색, 조작 및 처리하는 유연하고 효율적인 방법을 제공합니다.

Note

정규식은 SQL Server 2025 또는 Always-up-to-date업데이트 정책을 사용하여 Azure SQL Managed Instance에서 사용할 수 있습니다.

정규식의 이 구현은 RE2 정규식 라이브러리를 기반으로 합니다. 자세한 내용은 RE2 정규식 구문을 참조하세요.

지원되는 regex 함수:

Function Description
REGEXP_LIKE 텍스트 입력이 정규식 패턴과 일치하는지 여부를 나타내는 부울 값을 반환합니다.
REGEXP_REPLACE regex 패턴이 발견되는 대체 문자열로 대체된 수정된 소스 문자열을 반환합니다.
REGEXP_SUBSTR 정규식 패턴에 따라 문자열의 일부를 추출합니다.

regex 패턴과 일치하는 부분 문자열의 N번째 항목을 반환합니다.
REGEXP_INSTR 제공된 옵션에 따라 일치하는 부분 문자열의 시작 또는 끝 위치를 반환합니다.
REGEXP_COUNT 문자열에서 regex 패턴이 발생하는 횟수를 반환합니다.
REGEXP_MATCHES 정규식 패턴과 문자열을 일치시키는 캡처된 부분 문자열의 테이블을 반환합니다. 일치하는 항목이 없으면 함수는 행을 반환하지 않습니다.
REGEXP_SPLIT_TO_TABLE regex 패턴으로 구분된 문자열 분할 테이블을 반환합니다. 패턴과 일치하지 않으면 함수는 문자열을 반환합니다.

정규식은 특별한 의미와 함수가 있는 리터럴 문자와 메타 문자로 구성될 수 있습니다.

기본 정규식은 단일 리터럴 문자입니다. 문자는 메타문자를 제외하고 자체와 일치합니다. 메타 문자에는 *, +, ?, ()또는 |. 메타 문자와 일치하려면 백슬래시로 이스케이프합니다. 예를 들어 \* 리터럴 별표(*) 문자와 일치합니다.

두 정규식을 변경하거나 연결하여 새 정규식을 구성할 수 있습니다. e1s 와 일치하고 e2t와 일치하면 e1 | e2s 또는 t와 일치하고 e1e2st와 일치합니다.

메타 문자 및 *+ 반복 연산자?입니다. e1*은 0개 이상의(가능한 다른) 문자열 시퀀스와 일치하며, 각 문자열은 e1과 일치하고 e1 + 은 하나 이상 일치합니다. e1? 는 0 또는 1과 일치합니다.

연산자 우선 순위(가장 약한 바인딩에서 가장 강력한 바인딩까지)는 다음과 같습니다. - 교대 - 연결 - 반복 연산자

명시적 괄호를 사용하여 산술 식과 같이 다른 의미를 적용할 수 있습니다. 몇 가지 예: ab|cd 같음 (ab)|(cd)ab ; 은 .에 해당합니다 a(b).

RE2에서 허용하는 정규식 구문에 대한 자세한 내용은
RE2 정규식 구문입니다. 이 페이지에는 PCRE, Perl 및 Vim에서 허용하는 몇 가지 구문도 나열되어 있습니다.

허용되는 정규식 문자

단일 문자 식

단일 문자 표현의 종류 Examples
모든 문자, 줄 바꿈(s=true)을 포함할 수 있습니다. .
character class [xyz]
부정 문자 클래스 [^xyz]
Perl 문자 클래스 \d
부정된 Perl 문자 클래스 \D
ASCII 문자 클래스 [[:alpha:]]
부정된 ASCII 문자 클래스 [[:^alpha:]]
유니코드 문자 클래스(한 글자 이름) \pN
유니코드 문자 클래스 \p{Greek}
부정된 유니코드 문자 클래스(한 글자 이름) \PN
부정된 유니코드 문자 클래스 \P{Greek}
합성물 Description
xy x 다음에 y
x | y x 또는 y(x 선호)
반복 Description
x* x 0개 이상, 더 선호
x+ 하나 이상의 x, 더 선호
x? 0 또는 1 x, 하나 선호
x{n,m} n 또는 n+1 또는 ... 또는 m x, 더 선호
x{n,} n 이상 x, 더 선호
x{n} 정확히 n x
x*? x 0개 이상, 더 적게 선호
x+? 하나 이상의 x, 더 적은 선호
x?? 0 또는 1 x, 0을 선호합니다.
x{n,m}? n 또는 n+1 또는 ... 또는 m x, 더 적은 선호
x{n,}? n 또는 더 많은 x, 더 적은 선호
x{n}? 정확히 n x

Note

1,000개를 초과하는 최소 또는 최대 반복 수를 만드는 계산 양식 x{n,m}x{n,}x{n} 거부 양식입니다. 무제한 반복에는 이 제한이 적용되지 않습니다.

Perl 문자 클래스

다음 표에서는 현재 지원되는 Perl 문자 클래스를 나열합니다.

Perl 문자 클래스(모든 ASCII 전용) Description
\d 숫자 ([0-9])
\D 숫자가 아님 ( [^0-9])
\s 공백 ( [\t\n\f\r ])
\S 공백 아님( [^\t\n\f\r ])
\w 단어 문자( [0-9A-Za-z_])
\W 단어에 포함되지 않는 문자( [^0-9A-Za-z_])

ASCII 문자 클래스

다음 표에서는 현재 지원되는 ASCII 문자 클래스를 나열합니다.

ASCII 문자 클래스 Description
[[:alnum:]] 영숫자( [0-9A-Za-z])
[[:alpha:]] 알파벳( [A-Za-z])
[[:ascii:]] ASCII ( [\x00-\x7F])
[[:blank:]] 빈칸 ( [\t ])
[[:cntrl:]] 제어 ( [\x00-\x1F\x7F])
[[:digit:]] 숫자 ([0-9])
[[:graph:]] 그래픽( [!-~] 또는 [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])
[[:lower:]] 소문자( [a-z])
[[:print:]] 인쇄 가능( [ -~] 또는 [ [:graph:]])
[[:punct:]] 문장 부호([!-/:-@[-\``{-~])
[[:space:]] 공백 ( [\t\n\v\f\r ])
[[:upper:]] 대문자( [A-Z])
[[:word:]] 단어 문자( [0-9A-Za-z_])
[[:xdigit:]] 16진수( [0-9A-Fa-f])

리터럴 문자

  • Letters
  • Numbers
  • Symbols

빈 문자열

빈 문자열 Description
^ 텍스트 또는 줄의 시작 부분(m=true)
$ 텍스트 끝(예: \z아님 \Z) 또는 줄(m=true)
\A 텍스트 시작 부분
\b ASCII 단어 경계(\w한쪽 및 \W\A\z 다른 쪽)
\B ASCII 단어 경계에 없음
\z 텍스트 끝

Groupings

패턴의 캡처 그룹(하위 식)은 다음과 같습니다.

Grouping Description
(re) 번호가 매겨진 캡처링 그룹(하위 일치)
(?P<name>re) 명명된 캡처 그룹 및 번호 매기기 캡처 그룹(하위 일치)
(?:re) 비 캡처링 그룹
(?<flags>) 현재 그룹 내에서 설정 <flags> , 비 캡처
(?<flags>:re) 설정 <flags>re; 비 캡처링 그룹화

Flags

플래그를 사용하여 식 동작을 수정합니다. 다음은 그 예입니다.

Flag Description
i 대/소문자를 구분하지 않습니다(기본값 false)
m 여러 줄 모드: ^$ 시작/끝 텍스트 외에 시작/끝 선 일치(기본값 false)
s 일치 . 허용\n(기본값false)
c 대/소문자 구분(기본값 true)

이 구현은 RE2에 따른 정규식의 POSIX 표준을 지원하며, 대부분의 최신 정규식 엔진 및 도구와 호환되는 정규식 구문의 PCRE/PCRE2 버전을 지원합니다. 구문과 기능이 다른 POSIX, ANSI, Perl 및 PCRE와 같은 다양한 정규식 버전이 있습니다. 기본 정규식 엔진의 지원되는 구문 및 동작에 대한 자세한 내용은 정규식 라이브러리인 RE2를 참조하세요.

Note

SQL Server의 정규식 일치는 언어 비교를 위해 SQL 데이터 정렬을 적용하지 않습니다. 일치는 데이터 정렬 규칙이 아닌 패턴 및 유니코드 문자 속성을 기반으로 하므로 이 동작은 디자인되고 대부분의 정규식 엔진과 일치합니다. 따라서 특히 언어별 데이터 정렬이 있는 인덱싱된 열에서 LIKE와 같은 다른 문자열 비교 함수와 비교할 때 동작의 차이가 발생할 수 있습니다.

Requirements

  • Azure Data Studio, SQL Server Management Studio 또는 Visual Studio Code와 같은 SQL 클라이언트 도구입니다.
  • SQL 구문 및 쿼리에 대한 기본 지식입니다.
  • 정규식 구문 및 개념에 대한 기본적인 이해입니다.

FAQ

regex 사용의 성능 영향은 무엇인가요?

Regex 쿼리는 regex 패턴의 복잡성, 텍스트 데이터의 크기 및 관련된 행 수에 따라 성능에 영향을 줄 수 있습니다. 실행 계획 및 통계를 사용하여 regex 쿼리의 성능을 모니터링하고 최적화할 수 있습니다.

제한점

현재 지원되지 않는 항목은 다음과 같습니다.

  • LOB 데이터 형식(varchar(max) 또는 nvarchar(max))string_expressions은 다음 내장 함수에서 지원됩니다.
    • REGEXP_LIKE
    • REGEXP_COUNT
    • REGEXP_INSTR

그러나 이 지원은 최대 2MB의 입력 크기로 제한됩니다.

  • LOB 데이터 형식은 다음 정규식 함수에서 지원되지 않습니다.

    • REGEXP_REPLACE
    • REGEXP_SUBSTR
    • REGEXP_MATCHES
    • REGEXP_SPLIT_TO_TABLE
  • 정규식 함수는 고유하게 컴파일된 저장 프로시저에서 지원되지 않습니다.