>  기사  >  데이터 베이스  >  MySQL에서 REGEXP 정규식 사용에 대한 요약

MySQL에서 REGEXP 정규식 사용에 대한 요약

小云云
小云云원래의
2018-01-13 13:54:181909검색

저는 데이터를 찾기 위해 like를 사용했는데, 나중에 mysql에 정규식이 있다는 것을 알게 되었고, like보다 성능이 더 좋다고 느꼈습니다. 이제 mysql REGEXP 정규식 사용에 대해 자세히 설명하겠습니다. 이 방법이 모든 사람에게 도움이 되기를 바랍니다.

정규식은 문자열 집합을 설명합니다. 가장 간단한 정규식은 특수 문자를 포함하지 않는 정규식입니다. 예를 들어 정규식 hello는 hello와 일치합니다.

사소하지 않은 정규식은 2개 이상의 문자열과 일치할 수 있는 특수한 특정 구조를 채택합니다. 예를 들어 정규식 hello|word는 hello 문자열 또는 word 문자열과 일치합니다.

더 복잡한 예로, 정규 표현식 B[an]*s는 다음 문자열 중 하나와 일치합니다: Bananas, Baaaaas, Bs 및 B로 시작하고 s로 끝나며 숫자를 포함하는 모든 문자열 a의 다른 문자열 또는 n자.

다음은 REGEXP 연산자를 사용하여 테이블에 사용할 수 있는 스키마입니다.

애플리케이션 예, 사용자 테이블에서 이메일 형식이 잘못된 사용자 레코드 찾기:


SELECT * 
FROM users
WHERE email NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$'

MySQL 데이터베이스의 정규 표현식 구문(주로 다양한 기호의 의미 포함).

(^) 문자

는 문자열의 시작 위치와 일치합니다. 예를 들어 "^a"는 문자 a로 시작하는 문자열을 의미합니다.


mysql> select 'xxxyyy' regexp '^xx';

+-----------------------+
| 'xxxyyy' regexp '^xx' |
+-----------------------+
|           1 |
+-----------------------+
1 row in set (0.00 sec)

xxxyyy 문자열이 xx로 시작하는지 쿼리합니다. 결과 값은 1입니다. 이는 값이 true이고 조건이 충족됨을 의미합니다.

($) 문자

는 문자 X로 끝나는 문자열을 나타내는 "X^"와 같이 문자열의 끝 위치와 일치합니다.

(.) 문자

는 영어의 점입니다. 캐리지 리턴, 라인 피드 등을 포함한 모든 문자와 일치합니다.

(*) 문자

별표는 0개 이상의 문자와 일치하며, 그 앞에 내용이 있어야 합니다. 예:


mysql> select 'xxxyyy' regexp 'x*';

이 SQL 문은 정규 일치가 true입니다.

(+) 문자

더하기 기호는 1개 이상의 문자와 일치하며 그 앞에 내용도 있어야 합니다. 더하기 기호는 별표가 0번 나타날 수 있고 더하기 기호가 적어도 한 번 나타나야 한다는 점을 제외하면 별표와 유사하게 사용됩니다.

(?) 문자

물음표는 0 또는 1번 일치합니다.

예:

이제 위 표에 따라 요구 사항을 충족하기 위해 다양한 유형의 SQL 쿼리를 설치할 수 있습니다. 여기에 몇 가지 이해가 있습니다. person_tbl이라는 테이블이 있고 name이라는 필드가 있다고 가정해 보세요.

'st'로 시작하는 모든 이름을 찾는 쿼리


mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

'ok'로 끝나는 모든 이름을 찾는 쿼리


mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

Query Find 이름에 'mar'가 포함된 모든 문자열


mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

이 쿼리는 모음으로 시작하고 'ok'로 끝나는 모든 이름을 찾습니다


mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

다음 예약어는 정규 표현식에 사용할 수 있습니다

^

일치하는 문자열은 다음 문자열로 시작합니다


mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配) 
mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)

$

일치하는 문자열은 이전 문자열로 끝납니다


mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配) 
mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配) 
.

모든 문자와 일치합니다(새 줄 포함)


mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配) 
mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)

a*

임의 개수의 a와 일치(빈 문자열 포함)


mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配) 
mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配) 
mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)

a+

임의 개수의 a와 일치(빈 문자열 제외)


mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配) 
mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)

어?

1 또는 Zero Al
mysql> select "Bn" REGEXP "^Ba?n"; -> 1(表示匹配) 
mysql> select "Ban" REGEXP "^Ba?n"; -> 1(表示匹配) 
mysql> select "Baan" REGEXP "^Ba?n"; -> 0(表示不匹配)

de | abc


abc

matches 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를 좋아하는 것만 큼 많은 사람들 (빈 문자열 포함).

mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配) 
mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配) 
mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)

{1}

{2,3}


이것은 여러 이전 예약어의 기능을 실현할 수 있는 보다 포괄적인 방법입니다.

a*

는 다음과 같이 쓸 수 있습니다. 0,}

a+

는 다음과 같이 쓸 수 있습니다.{1,}

a?

는 다음과 같이 쓸 수 있습니다. {0,1}

{}에는 정수 매개변수 i가 하나만 있습니다. 이는 문자를 의미합니다. i번만 나타날 수 있습니다. {} 내에 정수 매개변수 i가 있고 그 뒤에 ","가 옵니다. 이는 문자가 i번 이상 나타날 수 있음을 나타냅니다. {} 내에 정수 매개변수 i가 하나만 있습니다. "," 뒤에 정수 매개변수 j가 오면 문자가 i회 이상 j회(i회 및 j회 포함)만 나타날 수 있음을 의미합니다. 정수 매개변수는 0보다 크거나 같고 RE_DUP_MAX보다 작거나 같아야 합니다(기본값은 255). 두 개의 매개변수가 있는 경우 두 번째 매개변수는 첫 번째 매개변수보다 크거나 같아야 합니다.

[a-dX]

는 "a", "b", "c", "d" 또는 "X"

[^와 일치합니다. a- dX]

는 "a", "b", "c", "d", "X"를 제외한 모든 문자와 일치합니다.

"[", "]"는 쌍으로 사용해야 합니다

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(表示不匹配)

관련 권장 사항:

JS 정규식은 신분증 확인 기능을 완벽하게 구현합니다.


정규식을 사용하여 JavaScript 코드를 강조하는 방법

javascript는 js

에 주석이 달린 정규식 코드와 일치합니다.

위 내용은 MySQL에서 REGEXP 정규식 사용에 대한 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.