구문 및 예제가 포함된 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는 동의어입니다.
  • 정규식은 패턴 일치를 수행할 때 더 많은 유연성과 제어를 허용하는 다양한 메타 문자를 지원합니다.
  • 백슬래시는 정규 표현식에서 이스케이프 문자로 사용됩니다. 패턴 매치에서 이중 백슬래시가 사용된 경우에만 고려됩니다.
  • 정규식은 대소문자를 구분하지 않습니다.

이 게시물을 요약하면 다음과 같습니다.