행위

Mysql 정규식

DB CAFE

1 정규식 패턴


?  : 글자 0 개 또는 1 개 일치 -> books?  : book, books

     .      : 단일문자를 매치시킨다. 즉 문자 하나 일치 ->.ap : map, jap, kap, lap ....
     +      : 문자 여러개 반복(1자 이상 일치) -> la+ : la, laa,laaa ...
     *      : 문자 여러개 반복(0자 이상 일치)  -> la* : l, la, laa, laaa...
     ^      : 문자열의 처음 -> ^1 -> 1로 시작되는 줄
     $      : 문자열의 끝  -> 1$ -> 1로 끝나는 줄
    ()      : 그룹화 ->('(abc)*') : 'abc'문자열이 연속적으로 0 번 이상 
    [문자들..]   : 괄호안의 어느 문자와 일치   -> [0-9] : 모든 숫자, [A-Za-z] : 모든 영문자   
{숫자}  : 숫자만큼 반복



notifications_active (중요사항)

1. '.' 은 모든 단일 문자를 매치 시킨다. (= LIKE 에서 '_'와 같음)

     2.   '.....' 은 . 숫자만큼의 문자를 매치시킨다. -> ^.....$ -> 시작문자 수가 5개인 문자
     3.   문자 클래스 [..]은 대괄호 안에 있는 각각의 모든 문자를 매치 시킨다.
          ex> [abc]는 'a', 'b', 'c'를 각각 매치 시킨다.
     4.  문자 클래스에서 범위 지정은 대쉬('-')를 사용한다.
           ex> [0-9] 모든 숫자, [a-z] 모든 영문자 매치
     5. 테스트되는 값이 있는 모든 곳에서 매칭을 한다.
          (LIKE는 전체 값에서만 패턴 매치를 진행한다.)
     6. 처음이라는 토큰 '^' 와 끝이라는 토큰 '$' 가 있다.

(응용)

       (노래) -> 노래와 정확히 일치
       노래{2} -> 노래 문자열이 연속적으로 정확히 2회 일치 -> ^.{5}$ = ^.....$
       노래{2,4} -> 노래가 2~4회 일치
       [ab]노래 -> []에 묶인 어느 것인가와 일치 : a노래, b노래
       [1-3]명 -> 지정한 범위에 포함된 임의의 문자와 일치 : 1명, 2명, 3명
       [^1-3]명 -> 지정한 범위에 포함되지 않는 임의의 문자에 일치 : 4명, 5명 ....



1.1 regexp '문자'

 attach_file '문자' : 아무런 기호가 없는 것 -> like '% 문자 % '와 일치

mysql> select * from pet where species regexp 'do' ; -> do가 최소한 1회 일치
(= SELECT * FROM pet WHERE species LIKE '%do%'; )
mysql> SELECT * FROM pet WHERE name REGEXP 'w';

1.2 regexp '?'

 attach_file

  •  ? : 글자 0 개 또는 1 개 일치 -> books?  : book, books

mysql> select * from pet where species regexp 'do?'; -> d 또는 do가 일치

1.3 regexp '.'

  • . : 단일문자를 매치시킨다. 즉 문자 하나 일치 ->.ap : map, jap, kap, lap ....
mysql> select * from pet where species regexp '.d'; ->단일문자 d로 끝나는 앞의 모든 문자


mysql> select * from pet1 where species regexp 'd.'; -> 단일문자 d로 시작되는 뒤의 모든 문자
위에서 d.로 검색하는 경우에 bird는 검색되지 않음에 유의함.
mysql> select * from pet1 where species regexp '.d.'; 중간에 d가 들어가는 문자
mysql> select * from pet where name regexp '^.....$'; -> 시작부터 5글자로 끝나는 문장을 찾는다.
(= SELECT * FROM pet WHERE name REGEXP '^.{5}$'; )
mysql> select * from pet where name regexp '.....$'; -> 끝에서 5글자 이상이 되는 문장

1.4 regexp '+'

  • + : 문자 여러개 반복(1자 이상 일치) -> la+ : la, laa,laaa ...
mysql> select * from pet where name regexp 'f+'; -> f가 1회 이상 반복


1.5 regexp '*'

  • * : 문자 여러개 반복(0자 이상 일치) -> la* : l, la, laa, laaa...
mysql> select * from pet where name regexp 's*'; -> s가 0회 이상 들어 있는 문자

1.6 regexp '^'

(6) ^ : 문자열의 처음 -> ^1 -> 1로 시작되는 줄                   
mysql<source lang=sql>> select * from pet where owner regexp '^b'; -> b로 시작되는 문자

  (= SELECT * FROM pet WHERE owner LIKE 'b%'; )
mysql> SELECT * FROM pet WHERE name REGEXP BINARY '^b';
   바이너리 키워드로 인해 소문자 b로 시작하는 이름을 찾는다.

1.7 regexp '$'

  • $ : 문자열의 끝 -> 1$ -> 1로 끝나는 줄
mysql> select * from pet where name regexp 'r$'; -> 끝이 r로 끝나는 문자

1.8 regexp '(그룹)'

  • () : 그룹화 ->('(abc)*') : 'abc'문자열이 연속적으로 0 번 이상

1.9 regexp '[문자]'

  • [문자들..] : 괄호안의 어느 문자와 일치
<source lang=sql>mysql> select * from pet where name regexp '[ab]'; -> 문장 중에 a 또는 b 가 들어 있는 문자
mysql> select * from pet where name regexp '^[bc]';  -> b 또는 c로 시작되는 문자
mysql> select * from pet where death regexp '[0-9]';  [0-9] -> 모든 숫자
 mysql> select * from pet where sex regexp '[A-Za-z]'; [A-Za-z] -> 모든 영문글자

</source>


1.10 regexp '{숫자}'

(10){숫자} : 숫자만큼 반복   // {2,4} -> 2회 ~ 4회 반복
  mysql> select * from pet where name regexp 'ow{1}'; -> ow 1회
mysql> select * from pet where owner regexp 'n{1,2}'; -> n이 1회 또는 2회되는 문자
  • {n}('repeat-n-times') 연산자를 사용했다.
mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$'; -> 시작부터 5문자가 되는 문자


1.11 regexp '|'

  • | : OR 연산 (또는) -> ('A|B') : A 또는 B
mysql> select * from pet where name regexp '^c|y$';


1.12 regexp '문자'

  • - : 문자의 지정 범위는 -를 사용한다. -> [0-9] : 모든 숫자 , [a-z] : 모든 영문자
mysql> select * from pet where name regexp '^[a-f]';

1.13 RLIKE '문자'

  • mysql> select 필드명 from 테이블명 where 필드명 RLIKE 'digit:+';
</source> 
    문자열에 숫자가 포함된 행을 구하는 SQL 구문
mysql> select * from pet where death rlike '[[:digit:]]+';