• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 1. 함수와 연산자 참조
    2. 식 평가 형식 변환
    3. 연산자
    4. 제어 흐름 함수
    5. 문자열 함수
    1. 문자열 비교 함수
    2. 정규​​ 표현식
    6. 수치 함수와 연산자
    7. 날짜 및 시간 함수
    8. MySQL에서 사용되는 달력
    9. Full-Text 검색 기능
    10. 캐스트 함수와 연산자
    11. XML 함수
    12. 비트 함수
    13. 암호화 함수와 압축 함수
    14. 정보 함수
    15. 공간 분석 함수
    16. 글로벌 트랜잭션 ID와 함께 사용되는 함수
    17. MySQL Enterprise Encryption 기능
    18. 기타 함수
    19. GROUP BY 절에서 사용되는 함수와 수식
    20. 정밀 계산
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

12.5.2 정규​​ 표현식

표 12.9 문자열 정규식 연산자

이름 설명
NOT REGEXP REGEXP의 부정
REGEXP 정규식을 사용하여 패턴 일치
RLIKE REGEXP의 동의어입니다

정규 표현식은 복잡한 검색 패턴을 지정하는 강력한 방법입니다.

MySQL에서는 POSIX 1003.2 준수하는 것을 목적으로 한 Henry Spencer 씨의 정규식 구현이 사용됩니다. MySQL은 SQL 문에서 REGEXP 연산자와 함께 실행되는 패턴 매칭 연산을 지원하기 위해 확장 버전을 사용하고 있습니다.

이 섹션에서는 MySQL의 REGEXP 연산에 사용할 수있는 특수 문자 나 구조를 예를 보여 요약하고 있습니다. Henry Spencer 씨의 regex(7) 매뉴얼 페이지에서 찾을 수 정보가 모두 포함되어있는 것은 아닙니다. 그 매뉴얼 페이지는 MySQL 소스 배포판의 regex 디렉토리에있는 regex.7 파일에 포함되어 있습니다. 섹션 3.3.4.7 "패턴 일치" 를 참조하십시오.

정규식 연산자

  • expr NOT REGEXP pat , expr NOT RLIKE pat

    이것은 NOT ( expr REGEXP pat ) 와 동일합니다.

  • expr REGEXP pat , expr RLIKE pat

    패턴 pat 과 비교하여 문자열 식 expr 의 패턴 일치를 수행합니다. 패턴은 확장 정규 표현식이 될 수 있습니다. 구문은이 섹션의 뒷부분에서 설명합니다. expr 이 pat 과 일치하는 경우는 1 을 반환하고, 그렇지 않으면 0 을 반환합니다. expr 또는 pat 중 하나가 NULL 이면 결과도 NULL 입니다. RLIKE 는 mSQL 과의 호환성을 보장하기 위해 마련된 REGEXP 의 동의어입니다.

    패턴은 리터럴 문자열 일 필요는 없습니다. 예를 들어, 문자열 식이나 테이블 컬럼으로 지정할 수 있습니다.

    참고

    MySQL에서 문자열 C의 이스케이프 구문 (예를 들어, 개행 문자를 나타 내기 위해 " \n ")를 사용하고 있기 때문에, REGEXP 문자열에서 사용되는 " \ "모두 이중으로 지정해야합니다 .

    REGEXP 는 이진 문자열로 사용되는 경우를 제외하고는 대소 문자를 구분하지 않습니다.

     mysql> SELECT 'Monty!' REGEXP '.*';
             -> 1
     mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
             -> 1
     mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
             -> 1 0
     mysql> SELECT 'a' REGEXP '^[ad]';
             -> 1
    

    REGEXP 및 RLIKE 에서는 문자의 형태를 결정할 때와 비교를 수행 할 때 인수의 문자 집합 및 정렬 순서가 사용됩니다. 인수에 다양한 문자 집합 또는 데이터 정렬이 포함 된 경우 섹션 10.1.7.5 "식의 데이터 정렬" 에 설명 된대로 형식 변환 속성 규칙이 적용됩니다.

    경고

    REGEXP 및 RLIKE 연산자는 바이트 단위로 작동하므로 멀티 바이트 안전이 아닌 멀티 바이트 문자 집합을 사용하면 예기치 않은 결과가 생성 될 수 있습니다. 또한 이러한 연산자는 그 바이트 값을 기준으로 문자가 비교되기 때문에 악센트 문자는 지정된 데이터 정렬이 동일하다고 간주되는 경우에도 동일한으로 비교되지 않을 수 있습니다.

정규식 구문

정규 표현식은 문자열의 집합을 설명합니다. 가장 간단한 정규식 특수 문자를 사용하지 않는 것입니다. 예를 들어, 정규 표현식 hello 은 hello 에만 일치합니다.

중요한 정규식에서는 여러 문자열과 일치 할 수 있도록 특정 특수 구조가 사용됩니다. 예를 들어, 정규 표현식 hello|word 은 캐릭터 라인 hello 또는 캐릭터 라인 word 에 일치합니다.

보다 복잡한 예제로 정규식 B[an]*s 는 문자열 Bananas , Baaaaas , Bs 중 하나와 B 로 시작하고 s 로 끝나고 그 사이에 숫자의 a 또는 n 문자가 포함 된 기타 문자열과 일치합니다.

REGEXP 연산자의 정규식은 다음의 특수 문자 및 구조 중 하나가 사용되는 경우가 있습니다.

  • ^

    문자열의 시작과 일치합니다.

     mysql> SELECT 'fo\nfo' REGEXP '^fo$'; -> 0
     mysql> SELECT 'fofo' REGEXP '^fo'; -> 1
    
  • $

    문자열의 끝과 일치합니다.

     mysql> SELECT 'fo\no' REGEXP '^fo\no$'; -> 1
     mysql> SELECT 'fo\no' REGEXP '^fo$'; -> 0
    
  • .

    문자 (캐리지 리턴 및 줄 바꿈을 포함)과 일치합니다.

     mysql> SELECT 'fofo' REGEXP '^f.*$'; -> 1
     mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$'; -> 1
    
  • a*

    0 개 이상의 a 문자의 순서와 일치합니다.

     mysql> SELECT 'Ban' REGEXP '^Ba*n'; -> 1
     mysql> SELECT 'Baaan' REGEXP '^Ba*n'; -> 1
     mysql> SELECT 'Bn' REGEXP '^Ba*n'; -> 1
    
  • a+

    1 개 이상의 a 문자의 순서와 일치합니다.

     mysql> SELECT 'Ban' REGEXP '^Ba+n'; -> 1
     mysql> SELECT 'Bn' REGEXP '^Ba+n'; -> 0
    
  • a?

    제로 또는 1 개의 a 문자와 일치합니다.

     mysql> SELECT 'Bn' REGEXP '^Ba?n'; -> 1
     mysql> SELECT 'Ban' REGEXP '^Ba?n'; -> 1
     mysql> SELECT 'Baan' REGEXP '^Ba?n'; -> 0
    
  • de|abc

    시퀀스 de 또는 abc 중 하나와 일치합니다.

     mysql> SELECT 'pi' REGEXP 'pi|apa'; -> 1
     mysql> SELECT 'axe' REGEXP 'pi|apa'; -> 0
     mysql> SELECT 'apa' REGEXP 'pi|apa'; -> 1
     mysql> SELECT 'apa' REGEXP '^(pi|apa)$'; -> 1
     mysql> SELECT 'pi' REGEXP '^(pi|apa)$'; -> 1
     mysql> SELECT 'pix' REGEXP '^(pi|apa)$'; -> 0
    
  • (abc)*

    시퀀스 abc 의 0 개 이상의 인스턴스와 일치합니다.

     mysql> SELECT 'pi' REGEXP '^(pi)*$'; -> 1
     mysql> SELECT 'pip' REGEXP '^(pi)*$'; -> 0
     mysql> SELECT 'pipi' REGEXP '^(pi)*$'; -> 1
    
  • {1} , {2,3}

    {n} 또는 {m,n} 주석에서는 패턴의 이전 원자 (또는 "부분")의 다수의 출현과 일치하는 정규 표현식을 설명하는보다 일반적인 방법이 제공됩니다. m 및 n 은 정수입니다.

    • a*

      a{0,} 과 작성할 수 있습니다.

    • a+

      a{1,} 과 작성할 수 있습니다.

    • a?

      a{0,1} 과 작성할 수 있습니다.

    더 엄밀히 말하면, a{n} 는 a 의 정확히 n 개의 인스턴스와 일치합니다. a{n,} 는 a 의 n 개 이상의 인스턴스와 일치합니다. a{m,n} 는 a 의 m 개에서 n 개까지의 인스턴스와 일치합니다.

    m 및 n 은 0 에서 RE_DUP_MAX (디폴트는 255)까지의 범위 내에 있어야합니다. m 및 n 모두가 지정되어있는 경우 m 을 n 다음에해야합니다.

     mysql> SELECT 'abcde' REGEXP 'a[bcd]{2}e'; -> 0
     mysql> SELECT 'abcde' REGEXP 'a[bcd]{3}e'; -> 1
     mysql> SELECT 'abcde' REGEXP 'a[bcd]{1,10}e'; -> 1
    
  • [a-dX] , [^a-dX]

    a , b , c , d , 또는 X 이다 (^이 사용되는 경우는 그렇지) 임의의 문자와 일치합니다. 두 문자 사이의 - 문자는 첫 번째 문자에서 두 번째 문자까지의 모든 문자와 일치하는 범위가 형성됩니다. 예를 들어, [0-9] 는 임의의 10 진수와 일치합니다. 리터럴 문자 ] 를 포함 왼쪽 괄호 [ 직후에 기술해야합니다. 리터럴 문자 - 를 포함하려면 첫 번째 또는 마지막에 기술 할 필요가 있습니다. [] 쌍의 내부에 정의 된 특수한 의미를 가지지 않는 문자는 그 자체로 밖에 일치하지 않습니다.

     mysql> SELECT 'aXbc' REGEXP '[a-dXYZ]'; -> 1
     mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]$'; -> 0
     mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]+$'; -> 1
     mysql> SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$'; -> 0
     mysql> SELECT 'gheis' REGEXP '^[^a-dXYZ]+$'; -> 1
     mysql> SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$'; -> 0
    
  • [.characters.]

    ( [ 와 ] 를 사용하여 작성된) 괄호 식에 그 조합 요소의 문자에 해당합니다. characters 는 단일 문자 또는 newline 등의 문자 이름입니다. 다음 표는 허용되는 문자 이름을 나열합니다.

    다음 표는 허용되는 문자 이름과 일치하는 문자를 표시합니다. 숫자로 지정된 문자는 값이 8 진수로 표기됩니다.

    이름 문자 이름 문자
    NUL 0 SOH 001
    STX 002 ETX 003
    EOT 004 ENQ 005
    ACK 006 BEL 007
    alert 007 BS 010
    backspace '\b' HT 011
    tab '\t' LF 012
    newline '\n' VT 013
    vertical-tab '\v' FF 014
    form-feed '\f' CR 015
    carriage-return '\r' SO 016
    SI 017 DLE 020
    DC1 021 DC2 022
    DC3 023 DC4 024
    NAK 025 SYN 026
    ETB 027 CAN 030
    EM 031 SUB 032
    ESC 033 IS4 034
    FS 034 IS3 035
    GS 035 IS2 036
    RS 036 IS1 037
    US 037 space ' '
    exclamation-mark '!' quotation-mark '"'
    number-sign '#' dollar-sign '$'
    percent-sign '%' ampersand '&'
    apostrophe '\'' left-parenthesis '('
    right-parenthesis ')' asterisk '*'
    plus-sign '+' comma ','
    hyphen '-' hyphen-minus '-'
    period '.' full-stop '.'
    slash '/' solidus '/'
    zero '0' one '1'
    two '2' three '3'
    four '4' five '5'
    six '6' seven '7'
    eight '8' nine '9'
    colon ':' semicolon ';'
    less-than-sign '<' equals-sign '='
    greater-than-sign '>' question-mark '?'
    commercial-at '@' left-square-bracket '['
    backslash '\\' reverse-solidus '\\'
    right-square-bracket ']' circumflex '^'
    circumflex-accent '^' underscore '_'
    low-line '_' grave-accent '`'
    left-brace '{' left-curly-bracket '{'
    vertical-line '|' right-brace '}'
    right-curly-bracket '}' tilde '~'
    DEL 177

     mysql> SELECT '~' REGEXP '[[.~.]]'; -> 1
     mysql> SELECT '~' REGEXP '[[.tilde.]]'; -> 1
    
  • [=character_class=]

    ( [ 및 ] 사용하여 작성된) 괄호 식의 [=character_class=] 는 등가 클래스를 나타냅니다. 이것은 동일한 데이터 정렬 값을 가진 모든 문자 (자신을 포함)과 일치합니다. 예를 들어, o 및 (+) 가 등가 클래스의 멤버 인 경우, [[=o=]] , [[=(+)=]] 및 [o(+)] 는 모든 동의어입니다. 등가 클래스는 범위의 끝점으로 사용할 수없는 경우도 있습니다.

  • [:character_class:]

    ( [ 와 ] 를 사용하여 작성된) 괄호 식의 [:character_class:] 는 그 클래스에 속하는 모든 문자와 일치하는 문자 클래스를 나타냅니다. 다음 표는 표준 클래스 이름을 나열합니다. 이 이름은 ctype(3) 매뉴얼 페이지에 정의 된 문자 클래스를 나타냅니다. 특정 로케일에서는 다른 클래스 이름이 제공되는 경우도 있습니다. 문자 클래스는 범위의 끝점으로 사용할 수없는 경우도 있습니다.

    문자 클래스 이름 의미
    alnum 영숫자
    alpha 알파벳 문자
    blank 공백
    cntrl 제어 문자
    digit 숫자 문자
    graph 도형 문자
    lower 소문자 알파벳 문자
    print 도형 또는 공백
    punct 구두점 문자
    space 공백, 탭, 줄 바꿈 및 캐리지 리턴
    upper 대문자 알파벳 문자
    xdigit 16 진수 문자
     mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+'; -> 1
     mysql> SELECT '!!' REGEXP '[[:alnum:]]+'; -> 0
    
  • [[:<:]] , [[:>:]]

    이러한 마커는 단어 경계를 나타냅니다. 단어의 시작과 끝에 각각 일치합니다. 단어는 전후에 단어 문자가 존재하지 않는 단어 문자의 시퀀스입니다. 단어 문자는 alnum 클래스의 영숫자 문자 또는 밑줄 ( _ )입니다.

     mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1
     mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]'; -> 0
    

정규 표현식에서 특수 문자의 리터럴 인스턴스를 사용하려면 이전에 2 개의 백 슬래시 (\) 문자를 넣습니다. MySQL 파서가 2 개의 backslash 중 하나를 해석하고 정규 표현식 라이브러리가 다른 쪽을 해석합니다. 예를 들어, 특수 문자 + 가 포함 된 문자열 1+2 에 일치하는 정규 표현식은 다음 중 마지막 것뿐입니다.

 mysql> SELECT '1+2' REGEXP '1+2'; -> 0
 mysql> SELECT '1+2' REGEXP '1\+2'; -> 0
 mysql> SELECT '1+2' REGEXP '1\\+2'; -> 1


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved