구문 및 예제가 포함된 MYSQL 정규 표현식(REGEXP)
정규 표현식이란 무엇입니까?
정규 표현식은 복잡한 기준과 일치하는 데이터를 검색하는 데 도움이 됩니다. 이전 튜토리얼에서 와일드카드를 살펴보았습니다. 이전에 와일드카드로 작업한 적이 있다면 와일드카드를 사용하여 비슷한 결과를 얻을 수 있는데 왜 정규 표현식을 배워야 하는지 궁금할 수 있습니다. 와일드카드와 비교했을 때 정규 표현식은 훨씬 더 복잡한 기준과 일치하는 데이터를 검색할 수 있기 때문입니다.
기본 구문
정규식의 기본 구문은 다음과 같습니다.
SELECT statements... WHERE fieldname REGEXP 'pattern';
여기 -
- "SELECT 문…" 표준입니다 SELECT 문
- “WHERE 필드 이름” 정규식이 수행될 열의 이름입니다.
- “REGEXP '패턴'” REGEXP는 정규 표현식 연산자이고 'pattern'은 REGEXP와 일치할 패턴을 나타냅니다. RLIKE 이다 REGEXP의 동의어 REGEXP와 동일한 결과를 얻습니다. LIKE 연산자와 혼동하지 않으려면 REGEXP를 사용하는 것이 더 좋습니다 대신.
이제 실제적인 예를 살펴보겠습니다.
SELECT * FROM `movies` WHERE `title` REGEXP 'code';
위 쿼리는 단어 코드가 포함된 모든 영화 제목을 검색합니다. "코드"가 제목의 시작, 중간, 끝에 있는지는 중요하지 않습니다. 제목에 포함되어 있는 한 고려됩니다.
a, b, c 또는 d로 시작하고 그 뒤에 다른 문자가 많이 오는 영화를 검색한다고 가정해 보겠습니다. 이를 달성하려면 어떻게 해야 할까요? 원하는 결과를 얻기 위해 메타문자와 함께 정규식을 사용할 수 있습니다.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
위 스크립트를 실행하면 MySQL 워크 벤치 myflixdb에 대해 다음과 같은 결과를 얻었습니다.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 4 | Code Name Black | Edgar Jimz | 2010 | NULL |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
이제 위의 결과를 담당하는 정규 표현식을 자세히 살펴보겠습니다.
'^[abcd]' 캐럿(^)은 패턴 일치가 시작 부분에 적용되어야 함을 의미하고 문자 목록 [abcd]는 a, b, c 또는 d로 시작하는 영화 제목만 결과 세트에 반환됨을 의미합니다.
위의 스크립트를 수정하고 NOT charlist를 사용하여 쿼리를 실행한 후 어떤 결과를 얻을 수 있는지 살펴보겠습니다.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
위 스크립트를 실행하면 MySQL myflixdb에 대한 워크벤치의 결과는 다음과 같습니다.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 3 | X-Men | 2008 | ||
| 9 | Honey mooners | John Schultz | 2005 | 8 |
| 16 | 67% Guilty | 2012 | ||
| 17 | The Great Dictator | Chalie Chaplie | 1920 | 7 |
| 18 | sample movie | Anonymous | 8 | |
| 19 | movie 3 | John Brown | 1920 | 8 |
이제 위의 결과를 담당하는 정규식을 자세히 살펴보겠습니다.
'^[^abcd]' 캐럿(^)은 패턴 일치가 시작 부분에 적용되어야 함을 의미하고 문자 목록 [^abcd]는 포함된 문자로 시작하는 영화 제목이 결과 집합에서 제외됨을 의미합니다.
정규식 메타문자
위의 예에서 살펴본 것은 정규식의 가장 간단한 형태입니다. 이제 좀 더 발전된 정규식 패턴 일치를 살펴보겠습니다. 정규식만을 사용하여 "code" 패턴으로 시작하는 영화 제목을 검색한다고 가정해 보겠습니다. 어떻게 해야 할까요? 대답은 메타문자입니다. 이를 통해 정규식을 사용하여 패턴 검색 결과를 세부적으로 조정할 수 있습니다.
| 숯 | 기술설명 | 예시 | |
|---|---|---|---|
| * | The 별표 (*) 메타 문자는 그 앞에 오는 문자열의 0개 이상의 인스턴스와 일치하는 데 사용됩니다. | SELECT * FROM 영화 WHERE 제목 REGEXP 'da*'; 문자 "da"가 포함된 모든 영화를 제공합니다. 예를 들어 Da Vinci Code, Daddy's Little Girls입니다. | |
| + | The 더하기 (+) 메타 문자는 그 앞에 있는 하나 이상의 문자열 인스턴스를 일치시키는 데 사용됩니다. | SELECT * FROM `movies` WHERE `title` REGEXP 'mon+'; 문자 “mon”이 포함된 모든 영화를 제공합니다. 예를 들어 Angels and Demons입니다. | |
| ? | 질문(?) 메타 문자는 그 앞의 문자열 인스턴스 0개 또는 XNUMX개와 일치하는 데 사용됩니다. | SELECT * FROM `카테고리` WHERE `카테고리_이름` REGEXP 'com?'; 문자열 com이 포함된 모든 카테고리를 제공합니다. 예를 들어, 코미디, 로맨틱 코미디. | |
| . | The 점(.) 메타 문자는 새 줄을 제외한 모든 단일 문자를 일치시키는 데 사용됩니다. | SELECT * FROM 영화 WHERE `출시 연도` REGEXP '200.'; 문자 "200"으로 시작하고 그 뒤에 단일 문자가 오는 연도에 개봉된 모든 영화를 제공합니다. 예를 들어 2005,2007,2008 등. | |
| [알파벳] | The 문자 목록 [abc] 는 포함된 문자를 일치시키는 데 사용됩니다. | SELECT * FROM `movies` WHERE `title` REGEXP '[vwxyz]'; "vwxyz"에 단일 문자가 포함된 모든 영화를 제공합니다. 예를 들어 X-Men, Da Vinci Code 등이 있습니다. | |
| [^ abc] | The 챠리스트 [^abc] 포함된 문자를 제외한 모든 문자를 일치시키는 데 사용됩니다. | SELECT * FROM `영화` WHERE `제목` REGEXP '^[^vwxyz]'; "vwxyz"에 있는 문자 이외의 문자가 포함된 모든 영화를 제공합니다. | |
| [AZ] | The [AZ] 대문자와 일치하는 데 사용됩니다. | SELECT * FROM `members` WHERE `postal_address` REGEXP '[AZ]'; A부터 Z까지의 문자가 포함된 우편 주소를 가진 모든 회원에게 제공됩니다. 예를 들어 회원 번호가 1인 Janet Jones입니다. | |
| [az] | The [az] 소문자와 일치하는 데 사용됩니다. | SELECT * FROM `members` WHERE `postal_address` REGEXP '[az]'; a부터 z까지의 문자가 포함된 우편 주소를 가진 모든 회원을 제공합니다. .예를 들어 회원번호가 1인 Janet Jones입니다. | |
| [0-9] | The [0-9] 0부터 9까지의 숫자를 일치시키는 데 사용됩니다. | SELECT * FROM `멤버` WHERE `연락처_번호` REGEXP '[0-9]' 모든 회원에게 문자 “[0-9]”를 포함하는 연락처 번호를 제출합니다. 예를 들어, Robert Phil. | |
| ^ | The 캐럿(^) 경기를 처음부터 시작하는 데 사용됩니다. | SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]'; "cd"의 문자로 시작하는 제목이 있는 모든 영화를 제공합니다. 예를 들어 코드 이름 Black, Daddy's Little Girls 및 Da Vinci Code와 같습니다. | |
| | | The 세로 막대(|) 대안을 분리하는 데 사용됩니다. | SELECT * FROM `영화` WHERE `제목` REGEXP '^[cd]|^[u]'; "cd" 또는 "u"의 문자로 시작하는 제목이 있는 모든 영화를 제공합니다. 예를 들어 Code Name Black, Daddy's Little Girl, Da Vinci Code 및 Underworld – AwakenING. | |
| [[:<:]] | The[[:<:]] 단어의 시작과 일치합니다. | SELECT * FROM `영화` WHERE `제목` REGEXP '[[:<:]]for';
캐릭터로 시작하는 제목이 있는 모든 영화를 제공합니다. 예: Sarah Marshal을 잊어버림. |
|
| [[:>:]] | The [[:>:]] 단어의 끝과 일치합니다. | SELECT * FROM `영화` WHERE `제목` REGEXP 'ack[[:>:]]';
제목이 "ack" 문자로 끝나는 모든 영화를 제공합니다. .예를 들어 코드명 Black입니다. |
|
| [:수업:] | The [:수업:] 즉, 문자 클래스와 일치합니다.
[:알파:] 문자를 일치시키려면, [:우주:] 공백과 일치하도록, [:점점:] 는 구두점과 일치하며 상위 클래스 문자의 경우 [:upper:]입니다. |
SELECT * FROM `movies` WHERE `title` REGEXP '[:alpha:]';
제목이 있는 모든 영화에는 문자만 포함되어 있습니다. .예를 들어 Sarah Marshal, X-Men 등을 잊어 버렸습니다. 캐리비안의 해적 4와 같은 영화는 이 쿼리에서 생략됩니다. |
|
백슬래시(\)는 이스케이프 문자로 사용됩니다. 정규 표현식에서 패턴의 일부로 사용하려면 이중 백슬래시(\\)를 사용해야 합니다.
제품 개요
- 정규식은 데이터베이스 시스템에 대한 고급 검색 유틸리티를 구현하는 데 도움이 될 수 있는 강력하고 유연한 패턴 일치를 제공합니다.
- REGEXP는 정규 표현식 패턴 일치를 수행할 때 사용되는 연산자입니다. RLIKE는 동의어입니다.
- 정규식은 패턴 일치를 수행할 때 더 많은 유연성과 제어를 허용하는 다양한 메타 문자를 지원합니다.
- 백슬래시는 정규 표현식에서 이스케이프 문자로 사용됩니다. 패턴 매치에서 이중 백슬래시가 사용된 경우에만 고려됩니다.
- 정규식은 대소문자를 구분하지 않습니다.
