적용 대상: SQL Server 2025(17.x)
Azure SQL Database
Azure SQL Managed Instance
Microsoft 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 패턴으로 구분된 문자열 분할 테이블을 반환합니다. 패턴과 일치하지 않으면 함수는 문자열을 반환합니다. |
정규식은 특별한 의미와 함수가 있는 리터럴 문자와 메타 문자로 구성될 수 있습니다.
기본 정규식은 단일 리터럴 문자입니다. 문자는 메타문자를 제외하고 자체와 일치합니다. 메타 문자에는 *, +, ?, ()또는 |. 메타 문자와 일치하려면 백슬래시로 이스케이프합니다. 예를 들어 \* 리터럴 별표(*) 문자와 일치합니다.
두 정규식을 변경하거나 연결하여 새 정규식을 구성할 수 있습니다. e1 이 s 와 일치하고 e2 가 t와 일치하면 e1 | e2 가 s 또는 t와 일치하고 e1e2 가 st와 일치합니다.
메타 문자 및 *+ 반복 연산자?입니다. 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_LIKEREGEXP_COUNTREGEXP_INSTR
그러나 이 지원은 최대 2MB의 입력 크기로 제한됩니다.
LOB 데이터 형식은 다음 정규식 함수에서 지원되지 않습니다.
REGEXP_REPLACEREGEXP_SUBSTRREGEXP_MATCHESREGEXP_SPLIT_TO_TABLE
정규식 함수는 고유하게 컴파일된 저장 프로시저에서 지원되지 않습니다.