Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Ví dụ về MySQL REGEXP

Trong MySQL, REGEXP toán tử được sử dụng để xác định xem một chuỗi có khớp với một biểu thức chính quy hay không. Nó là từ đồng nghĩa với REGEXP_LIKE() .

Nếu chuỗi khớp với biểu thức chính quy được cung cấp, kết quả là 1 , nếu không thì nó là 0 .

Cú pháp

Cú pháp như sau:

 expr REGEXP pat 

Ở đâu expr là chuỗi đầu vào và pat là biểu thức chính quy mà bạn đang kiểm tra chuỗi.

Ví dụ 1 - Cụm từ Thông dụng Cơ bản

Biểu thức chính quy cơ bản nhất mà chúng ta có thể sử dụng là một biểu thức không có ký tự đặc biệt trong đó. Ở đây, chúng tôi chỉ sử dụng một chuỗi. Nếu bất kỳ phần nào của chuỗi đầu vào khớp với chuỗi đó, nó sẽ trả về kết quả khớp.

 CHỌN "Bắp" REGEXP "Bắp" AS "Bắp", "Acorn" REGEXP "Bắp" AS "Acorn", "Góc" REGEXP "Bắp" AS "Góc", "Phô mai" REGEXP "Bắp" NHƯ "Phô mai '; 

Kết quả:

 + ------ + ------- + -------- + -------- + | Bắp ngô | Acorn | Góc | Phô mai | + ------ + ------- + -------- + -------- + | 1 | 1 | 1 | 0 | + ------ + ------- + -------- + -------- + 

Ví dụ 2 - So khớp đầu chuỗi

Trong ví dụ này, biểu thức chính quy chỉ định rằng chuỗi phải bắt đầu bằng Co .

 SELECT 'Corn' REGEXP '^ Co' AS 'Corn', 'Acorn' REGEXP '^ Co' AS 'Acorn', 'Cheese' REGEXP '^ Co' AS 'Cheese'; 

Kết quả:

 + ------ + ------- + -------- + | Bắp ngô | Acorn | Phô mai | + ------ + ------- + -------- + | 1 | 0 | 0 | + ------ + ------- + -------- + 

Ví dụ 3 - Khớp phần cuối của chuỗi

Trong ví dụ này, biểu thức chính quy chỉ định rằng chuỗi phải kết thúc bằng rn .

 CHỌN 'Corn' REGEXP 'rn $' AS 'Corn', 'Acorn' REGEXP 'rn $' AS 'Acorn', 'Cheese' REGEXP 'rn $' AS 'Cheese'; 

Kết quả:

 + ------ + ------- + -------- + | Bắp ngô | Acorn | Phô mai | + ------ + ------- + -------- + | 1 | 1 | 0 | + ------ + ------- + -------- + 

Ví dụ 4 - Khớp bất kỳ ký tự nào

. ký tự khớp với bất kỳ ký tự nào.

 CHỌN 'Bắp' REGEXP '.' NHƯ 'Bắp ngô', 'Phô mai' REGEXP '.' NHƯ 'Phô mai', '' REGEXP '.' NHƯ ''; 

Kết quả:

 + ------ + -------- + --- + | Bắp ngô | Phô mai | | + ------ + -------- + --- + | 1 | 1 | 0 | + ------ + -------- + --- + 

Ký tự này thường được sử dụng cùng với các ký tự khác để chỉ định các tiêu chí khác. Ví dụ:

 CHỌN 'Corn' REGEXP '^ C.rn $' AS 'Corn', 'Crn' REGEXP '^ C.rn $' AS 'Crn'; 

Kết quả:

 + ------ + ----- + | Bắp ngô | Crn | + ------ + ----- + | 1 | 0 | + ------ + ----- + 

Ở đây chúng tôi chỉ định rằng chuỗi phải bắt đầu bằng C , rằng nó phải được theo sau bởi một ký tự (bất kỳ ký tự nào) và nó phải kết thúc bằng rn .

Lưu ý rằng ký tự này chỉ định một trường hợp duy nhất của ký tự. Nếu bạn muốn chỉ định nhiều trường hợp (ví dụ:ee thay vì chỉ e ), bạn sẽ cần thêm nhiều . ký tự.

 CHỌN 'Tweet' REGEXP '^ Tw..t $' AS 'Tweet', 'Tweat' REGEXP '^ Tw..t $' AS 'Tweat', 'Tweet' REGEXP '^ Tw.t $' AS 'Tweet', 'Twit' REGEXP '^ Tw..t $' AS 'Twit'; 

Kết quả:

 + ------- + ------- + ------- + ------ + | Tweet | Tweat | Tweet | Twit | + ------- + ------- + ------- + ------ + | 1 | 1 | 0 | 0 | + ------- + ------- + ------- + ------ + 

Một cách khác để làm điều này là chỉ định số lần xuất hiện trong dấu ngoặc nhọn:

 CHỌN 'Tweet' REGEXP '^ Tw. {2} t $' AS 'Tweet', 'Tweat' REGEXP '^ Tw. {2} t $' AS 'Tweat', 'Tweet' REGEXP '^ Tw. {1} t $ 'AS' Tweet ',' Twit 'REGEXP' ^ Tw. {2} t $ 'AS' Twit '; 

Kết quả:

 + ------- + ------- + ------- + ------ + | Tweet | Tweat | Tweet | Twit | + ------- + ------- + ------- + ------ + | 1 | 1 | 0 | 0 | + ------- + ------- + ------- + ------ + 

Tuy nhiên, nếu bạn biết ký tự mà bạn đang tìm kiếm, bạn có thể chỉ định ký tự đó (thay vì . ký tự), như được minh họa trong ví dụ sau.

Ví dụ 5 - So khớp 0 hoặc nhiều trường hợp của một ký tự cụ thể

Chúng tôi có thể làm như sau để chỉ định không hoặc nhiều bản sao của e nhân vật:

 CHỌN 'Twet' REGEXP '^ Twe * t $' AS 'Twet', 'Tweet' REGEXP '^ Twe * t $' AS 'Tweet', 'Tweeet' REGEXP '^ Twe * t $' AS 'Tweeet ',' Twt 'REGEXP' ^ Twe * t $ 'AS' Twt ',' Twit 'REGEXP' ^ Twe * t $ 'AS' Twit ',' Twiet 'REGEXP' ^ Twe * t $ 'AS' Twiet ', 'Tweit' REGEXP '^ Twe * t $' AS 'Tweit'; 

Kết quả:

 + ------ + ------- + -------- + ----- + ------ + ------- + - ------ + | Sinh đôi | Tweet | Tweeet | Twt | Twit | Twiet | Tweit | + ------ + ------- + -------- + ----- + ------ + ------- + - ----- + | 1 | 1 | 1 | 1 | 0 | 0 | 0 | + ------ + ------- + -------- + ----- + ------ + ------- + - ----- + 

Bốn trận đầu tiên nhưng ba trận cuối cùng thì không.

Ví dụ 6 - Khớp một hoặc nhiều trường hợp của một ký tự cụ thể

Chúng tôi có thể sửa đổi ví dụ trước để chúng tôi chỉ nhận được kết quả phù hợp nếu một hoặc nhiều ký tự được tìm thấy (ví dụ trước đó trả về kết quả khớp nếu không hoặc nhiều hơn đã được tìm thấy). Để làm điều này, chúng tôi chỉ cần sử dụng + thay vì * :

 CHỌN 'Twet' REGEXP '^ Twe + t $' AS 'Twet', 'Tweet' REGEXP '^ Twe + t $' AS 'Tweet', 'Tweeet' REGEXP '^ Twe + t $' AS 'Tweeet ',' Twt 'REGEXP' ^ Twe + t $ 'AS' Twt ',' Twit 'REGEXP' ^ Twe + t $ 'AS' Twit ',' Twiet 'REGEXP' ^ Twe + t $ 'AS' Twiet ', 'Tweit' REGEXP '^ Twe + t $' AS 'Tweit'; 

Kết quả:

 + ------ + ------- + -------- + ----- + ------ + ------- + - ------ + | Sinh đôi | Tweet | Tweeet | Twt | Twit | Twiet | Tweit | + ------ + ------- + -------- + ----- + ------ + ------- + - ----- + | 1 | 1 | 1 | 0 | 0 | 0 | 0 | + ------ + ------- + -------- + ----- + ------ + ------- + - ----- + 

Trong trường hợp này, từ thứ tư trả về một kết quả khác với ví dụ trước.

Ví dụ 7 - So khớp số 0 hoặc một trường hợp của một ký tự cụ thể

Chúng tôi có thể sửa đổi ví dụ trước để chúng tôi chỉ nhận được một kết quả khớp với số không hoặc một trong các ký tự mong muốn. Để làm điều này, chúng tôi sử dụng ? :

 SELECT 'Twet' REGEXP '^ Twe? t $' AS 'Twet', 'Tweet' REGEXP '^ Twe? t $' AS 'Tweet', 'Tweeet' REGEXP '^ Twe? t $' AS 'Tweeet ',' Twt 'REGEXP' ^ Twe? T $ 'AS' Twt ',' Twit 'REGEXP' ^ Twe? T $ 'AS' Twit ',' Twiet 'REGEXP' ^ Twe? T $ 'AS' Twiet ', 'Tweit' REGEXP '^ Twe? T $' AS 'Tweit'; 

Kết quả:

 + ------ + ------- + -------- + ----- + ------ + ------- + - ------ + | Sinh đôi | Tweet | Tweeet | Twt | Twit | Twiet | Tweit | + ------ + ------- + -------- + ----- + ------ + ------- + - ----- + | 1 | 0 | 0 | 1 | 0 | 0 | 0 | + ------ + ------- + -------- + ----- + ------ + ------- + - ----- + 

Ví dụ 8 - Luân phiên

Bạn có thể sử dụng | ký tự để khớp với một hoặc một chuỗi ký tự khác:

 SELECT 'Tweet' REGEXP 'Tw | et' AS 'Tweet', 'For Let' REGEXP 'Tw | et' AS 'For Let', 'Banana' REGEXP 'Tw | et' AS 'Banana';  

Kết quả:

 + ------- + --------- + -------- + | Tweet | Cho Hãy | Chuối | + ------- + --------- + -------- + | 1 | 1 | 0 | + ------- + --------- + -------- + 

Đây là một ví dụ khác mà tôi tìm kiếm toàn bộ từ:

 CHỌN "Cat" REGEXP "Cat | Dog" AS "Cat", "Dog" REGEXP "Cat | Dog" AS "Dog", "Doggone" REGEXP "Cat | Dog" AS "Doggone", "Banana" REGEXP 'Cat | Dog' NHƯ 'Banana'; 

Kết quả:

 + ----- + ----- + --------- + -------- + | Con mèo | Con chó | Doggone | Chuối | + ----- + ----- + --------- + -------- + | 1 | 1 | 1 | 0 | + ----- + ----- + --------- + -------- + 

Chúng tôi vẫn nhận được một kết quả phù hợp ngay cả khi biểu thức chính quy của chúng tôi chỉ khớp với một phần của chuỗi.

Ví dụ 9 - So khớp 0 hoặc nhiều bản sao của một chuỗi

Bạn có thể sử dụng dấu ngoặc cùng với dấu hoa thị ()* để chỉ định không hoặc nhiều trường hợp của một chuỗi:

 CHỌN 'Banana' REGEXP '(an) *' AS 'Banana', 'Land' REGEXP '(an) *' AS 'Land', 'Cheese' REGEXP '(an) *' AS 'Cheese'; 

Kết quả:

 + -------- + ------ + -------- + | Chuối | Đất đai | Phô mai | + -------- + ------ + -------- + | 1 | 1 | 1 | + -------- + ------ + -------- + 

Một ví dụ khác:

 CHỌN 'Banana' REGEXP '^ B (an) * d $' AS 'Banana', 'Band' REGEXP '^ B (an) * d $' AS 'Band', 'Bald' REGEXP '^ B ( an) * d $ 'AS' Hói ',' Bad 'REGEXP' ^ B (an) * d $ 'AS' Bad '; 

Kết quả:

 + -------- + ------ + ------ + ----- + | Chuối | Ban nhạc | Hói đầu | Xấu | + -------- + ------ + ------ + ----- + | 0 | 1 | 0 | 0 | + -------- + ------ + ------ + ----- + 

Ví dụ 10 - Lặp lại

Như đã thấy trong ví dụ trước, bạn có thể sử dụng dấu ngoặc nhọn để chỉ định sự lặp lại. Ký hiệu này cung cấp cách viết chung hơn về biểu thức chính quy so với một số ví dụ trước đó:

 CHỌN 'Tweeet' REGEXP 'e {3} "AS" Tweeet "," Tweet "REGEXP" e {3} "AS" Tweet "; 

Kết quả:

 + -------- + ------- + | Tweeet | Tweet | + -------- + ------- + | 1 | 0 | + -------- + ------- + 

Ví dụ 11 - Phạm vi

Bạn có thể sử dụng ký tự gạch nối để chỉ định một phạm vi. Dưới đây là một ví dụ chỉ định một dải số:

 CHỌN 'Tweet 123' REGEXP '[0-9]' AS 'Tweet 123', 'Tweet ABC' REGEXP '[0-9]' AS 'Tweet ABC'; 

Kết quả:

 + -------- + ------- + | Tweeet | Tweet | + -------- + ------- + | 1 | 0 | + -------- + ------- + 

Và ví dụ sau chỉ định một loạt các chữ cái:

 CHỌN 'Tweet 123' REGEXP '[A-Z] "AS" Tweet 123 "," ABC "REGEXP" [A-Z] "AS" ABC "," 123 "REGEXP" [A-Z] "AS" 123 ";  

Kết quả:

 + -------- + ------- + | Tweeet | Tweet | + -------- + ------- + | 1 | 0 | + -------- + ------- + 

Dưới đây là những gì sẽ xảy ra nếu chúng tôi giới hạn phạm vi số:

 CHỌN '123' REGEXP '[1-3] "AS" 123 "," 012 "REGEXP" [1-3] "AS" 012 "," 045 "REGEXP" [1-3] "AS' 045 '; 

Kết quả:

 + ----- + ----- + ----- + | 123 | 012 | 045 | + ----- + ----- + ----- + | 1 | 1 | 0 | + ----- + ----- + ----- + 

Ví dụ 12 - Không trong phạm vi

Chúng ta có thể sử dụng ^ để sửa đổi ví dụ trước đó để loại trừ phạm vi ký tự đã chỉ định:

 CHỌN '123' REGEXP '[^ 1-3]' AS '123', '012' REGEXP '[^ 1-3]' AS '012', '045' REGEXP '[^ 1-3]' NHƯ '045'; 

Kết quả:

 + ----- + ----- + ----- + | 123 | 012 | 045 | + ----- + ----- + ----- + | 0 | 1 | 1 | + ----- + ----- + ----- + 

Vì vậy, chúng tôi nhận được kết quả ngược lại với ví dụ trước.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thực hiện UPSERT để tôi có thể sử dụng cả giá trị mới và cũ trong phần cập nhật

  2. Làm thế nào để có được bản ghi với giá trị tối đa trong MySQL

  3. Đạt được Dự phòng &Dự phòng MySQL trên Google Cloud Platform (GCP)

  4. Làm cách nào để xuất kết quả truy vấn MySQL ở định dạng CSV?

  5. Cách xóa cơ sở dữ liệu trong MySQL / MariaDB