Biểu thức chính quy MYSQL (REGEXP) với Cú pháp & Các ví dụ

Anonim

Biểu thức chính quy là gì?

Biểu thức chính quy giúp dữ liệu tìm kiếm phù hợp với các tiêu chí phức tạp. Chúng tôi đã xem xét các ký tự đại diện trong hướng dẫn trước. Nếu bạn đã làm việc với các ký tự đại diện trước đây, bạn có thể hỏi tại sao phải học các biểu thức chính quy khi bạn có thể nhận được các kết quả tương tự bằng cách sử dụng các ký tự đại diện. Bởi vì, so với các ký tự đại diện, biểu thức chính quy cho phép chúng tôi tìm kiếm dữ liệu phù hợp với tiêu chí phức tạp hơn.

Cú pháp cơ bản

Cú pháp cơ bản cho một biểu thức chính quy như sau

SELECT statements… WHERE fieldname REGEXP 'pattern';

ĐÂY -

  • "Câu lệnh SELECT…" là câu lệnh SELECT tiêu chuẩn
  • "Tên trường WHERE" là tên của cột mà biểu thức chính quy sẽ được thực hiện trên đó.
  • "REGEXP" pattern "" REGEXP là toán tử biểu thức chính quy và 'pattern' đại diện cho mẫu được REGEXP đối sánh. RLIKEtừ đồng nghĩa với REGEXP và đạt được kết quả tương tự như REGEXP. Để tránh nhầm lẫn nó với toán tử LIKE, tốt hơn nên sử dụng REGEXP thay thế.

Bây giờ chúng ta hãy xem xét một ví dụ thực tế-

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

Truy vấn trên tìm kiếm tất cả các tiêu đề phim có mã từ trong đó. Không quan trọng là "mã" ở đầu, giữa hay cuối của tiêu đề. Miễn là nó được chứa trong tiêu đề thì nó sẽ được xem xét.

Giả sử rằng chúng ta muốn tìm kiếm những bộ phim bắt đầu bằng a, b, c hoặc d, theo sau là bất kỳ số ký tự nào khác, chúng ta sẽ làm thế nào để đạt được điều đó. Chúng ta có thể sử dụng biểu thức chính quy cùng với ký tự siêu để đạt được kết quả mong muốn.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Thực thi tập lệnh trên trong MySQL workbench với myflixdb cho chúng ta kết quả sau.

 
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

Bây giờ chúng ta hãy xem xét kỹ biểu thức chính quy chịu trách nhiệm cho kết quả trên.

'[abcd]' dấu mũ (^) có nghĩa là khớp mẫu phải được áp dụng ở đầu và danh sách biểu đồ [abcd] có nghĩa là chỉ các tiêu đề phim bắt đầu bằng a, b, c hoặc d mới được trả về trong tập kết quả của chúng tôi.

Hãy sửa đổi tập lệnh ở trên của chúng tôi và sử dụng danh sách biểu đồ NOT và xem chúng tôi sẽ nhận được kết quả gì sau khi thực hiện truy vấn của mình.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Thực thi tập lệnh trên trong MySQL workbench với myflixdb cho chúng ta kết quả sau.

 
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

Bây giờ chúng ta hãy xem xét kỹ biểu thức chính quy chịu trách nhiệm cho các kết quả trên.

'[abcd]' dấu mũ (^) có nghĩa là khớp mẫu phải được áp dụng ở đầu và danh sách biểu đồ [abcd] có nghĩa là tiêu đề phim bắt đầu bằng bất kỳ ký tự nào kèm theo sẽ bị loại trừ khỏi tập kết quả.

Siêu ký tự biểu thức chính quy

Những gì chúng ta đã xem xét trong ví dụ trên là dạng đơn giản nhất của một biểu thức chính quy. Bây giờ hãy xem xét các đối sánh mẫu biểu thức chính quy nâng cao hơn. Giả sử chúng ta muốn tìm kiếm các tiêu đề phim bắt đầu bằng mẫu "mã" chỉ sử dụng một biểu thức chính quy, chúng ta sẽ làm như thế nào? Câu trả lời là siêu ký tự. Chúng cho phép chúng tôi tinh chỉnh kết quả tìm kiếm mẫu của mình bằng cách sử dụng biểu thức chính quy.

Char Sự miêu tả Thí dụ
* Siêu ký tự dấu hoa thị (*) được sử dụng để khớp với không (0) hoặc nhiều trường hợp của các chuỗi đứng trước nó CHỌN * TỪ phim WHERE tiêu đề REGEXP 'da *'; sẽ cung cấp cho tất cả các phim có chứa các ký tự "da". Ví dụ: Mật mã Da Vinci, Daddy's Little Girls.
+ Siêu ký tự cộng (+) được sử dụng để khớp với một hoặc nhiều trường hợp của chuỗi đứng trước nó. CHỌN * TỪ `phim` WHERE` title` REGEXP 'mon +'; sẽ cung cấp cho tất cả các phim có chứa các nhân vật "mon". Ví dụ, Thiên thần và Ác quỷ.
? Siêu ký tự câu hỏi (?) Được sử dụng để khớp với số không (0) hoặc một phiên bản của các chuỗi đứng trước nó. CHỌN * TỪ `danh mục` WHERE` danh_bục` REGEXP 'com?'; sẽ cung cấp cho tất cả các danh mục có chứa chuỗi com. Ví dụ, hài kịch, hài lãng mạn.
. Siêu ký tự dấu chấm (.) Được sử dụng để khớp với bất kỳ ký tự đơn lẻ nào ngoại trừ một dòng mới. CHỌN * TỪ phim WHERE `year_released` REGEXP '200.'; sẽ cung cấp cho tất cả các bộ phim được phát hành trong các năm bắt đầu bằng ký tự "200", theo sau là bất kỳ ký tự đơn lẻ nào. Ví dụ, 2005,2007,2008, v.v.
[abc] Danh sách biểu đồ [abc] được sử dụng để khớp với bất kỳ ký tự nào trong số các ký tự kèm theo. CHỌN * TỪ `phim` WHERE` title` REGEXP '[vwxyz]'; sẽ cung cấp cho tất cả các phim có chứa bất kỳ nhân vật đơn lẻ nào trong "vwxyz". Ví dụ, X-Men, Da Vinci Code, v.v.
[abc] Danh sách biểu đồ [abc] được sử dụng để khớp với bất kỳ ký tự nào ngoại trừ các ký tự kèm theo. CHỌN * TỪ `phim` WHERE` title` REGEXP '[vwxyz]'; sẽ cung cấp cho tất cả các phim có chứa các nhân vật khác với các nhân vật trong "vwxyz".
[AZ] Các [AZ] được sử dụng để phù hợp với bất kỳ chữ hoa. CHỌN * TỪ `thành viên` WHERE` địa chỉ bưu chính` REGEXP '[AZ]'; sẽ cung cấp cho tất cả các thành viên có địa chỉ bưu điện chứa bất kỳ ký tự nào từ A đến Z… Ví dụ, Janet Jones với số thành viên 1.
[az] Các [az] được sử dụng để phù hợp với bất kỳ chữ thường CHỌN * TỪ `thành viên` WHERE` địa chỉ bưu điện` REGEXP '[az]'; sẽ cung cấp cho tất cả các thành viên có địa chỉ bưu điện chứa bất kỳ ký tự nào từ a đến z… Ví dụ, Janet Jones với số thành viên 1.
[0-9] Các [0-9] được sử dụng để phù hợp với bất kỳ chữ số từ 0 đến 9. CHỌN * TỪ `thành viên` WHERE` contact_number` REGEXP '[0-9]' sẽ cung cấp cho tất cả các thành viên đã gửi số liên lạc có chứa ký tự "[0-9]". Ví dụ, Robert Phil.
^ Dấu mũ (^) được sử dụng để bắt đầu trận đấu khi bắt đầu. CHỌN * TỪ `phim` WHERE` title` REGEXP '[cd]'; cung cấp cho tất cả các phim có tiêu đề bắt đầu bằng bất kỳ nhân vật nào trong "cd". Ví dụ: Code Name Black, Daddy's Little Girls và Da Vinci Code.
| Thanh dọc (|) được sử dụng để cách ly các lựa chọn thay thế. SELECT * FROM `phim` WHERE` title` REGEXP '[cd] | [u]'; cung cấp cho tất cả các phim có tiêu đề bắt đầu bằng bất kỳ ký tự nào trong "cd" hoặc "u". Ví dụ: Code Name Black, Daddy's Little Girl, Da Vinci Code và Underworld - Awakening.
[[: <:]] Các [[: <:]] phù hợp với đầu từ. CHỌN * TỪ `phim` WHERE` title` REGEXP '[[: <:]] for'; cung cấp cho tất cả các bộ phim có tiêu đề bắt đầu bằng các nhân vật. Ví dụ: Quên Sarah Marshal.
[[:>:]] Các [[:>:]] phù hợp với cuối từ. CHỌN * TỪ `phim` WHERE` title` REGEXP 'ack [[:>:]]'; cung cấp cho tất cả các phim có tiêu đề kết thúc bằng các ký tự "ack". Ví dụ: Code Name Black.
[:lớp học:] Các [: lớp:] phù hợp với một lớp nhân vật tức là [: alpha:] để phù hợp với chữ cái, [: space:] để phù hợp với không gian màu trắng, [: punct:] là punctuations trận đấu và [: upper:] cho chữ tầng lớp thượng lưu. CHỌN * TỪ `phim` WHERE` title` REGEXP '[: alpha:]'; cung cấp cho tất cả các phim có tiêu đề chỉ chứa các chữ cái. Ví dụ, Forgetting Sarah Marshal, X-Men, v.v. Phim như Pirates of the Caribbean 4 sẽ bị bỏ qua bởi truy vấn này.

Dấu gạch chéo ngược (\) được sử dụng như một ký tự thoát. Nếu chúng ta muốn sử dụng nó như một phần của mẫu trong một biểu thức chính quy, chúng ta nên sử dụng dấu gạch chéo ngược kép (\\)

Tóm lược

  • Biểu thức chính quy cung cấp một đối sánh mẫu mạnh mẽ và linh hoạt có thể giúp chúng tôi triển khai các tiện ích tìm kiếm nguồn cho hệ thống cơ sở dữ liệu của chúng tôi.
  • REGEXP là toán tử được sử dụng khi thực hiện đối sánh mẫu biểu thức chính quy. RLIKE là từ đồng nghĩa
  • Biểu thức chính quy hỗ trợ một số siêu ký tự cho phép linh hoạt hơn và kiểm soát khi thực hiện đối sánh mẫu.
  • Dấu gạch chéo ngược được sử dụng như một ký tự thoát trong biểu thức chính quy. Nó chỉ được xem xét trong đối sánh mẫu nếu sử dụng dấu gạch chéo ngược kép.
  • Cụm từ thông dụng không phân biệt chữ hoa chữ thường.