Biểu thức chính quy MYSQL (REGEXP) với cú pháp và ví dụ
Biểu thức chính quy là gì?
Biểu thức chính quy giúp tìm kiếm dữ liệu khớp với các tiêu chí phức tạp. Chúng ta đã xem xét ký tự đại diện trong hướng dẫn trước. Nếu bạn đã từng làm việc với ký tự đại diện trước đây, bạn có thể tự hỏi tại sao phải học biểu thức chính quy khi bạn có thể có được kết quả tương tự bằng cách sử dụng ký tự đại diện. Bởi vì, so với ký tự đại diện, biểu thức chính quy cho phép chúng ta tìm kiếm dữ liệu khớp với các 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 CHỌN…” là tiêu chuẩn Câu lệnh SELECT
- “Tên trường Ở ĐÂU” là tên của cột mà biểu thức chính quy sẽ được thực hiện trên đó.
- “Mẫu REGEXP” REGEXP là toán tử biểu thức chính quy và 'mẫu' đại diện cho mẫu được REGEXP khớp. XE ĐẠP là từ đồng nghĩa với REGEXP và đạt được kết quả tương tự như REGEXP. Để tránh nhầm lẫn với toán tử THÍCH, nó tốt hơn nên sử dụng REGEXP thay thế.
Bây giờ chúng ta hãy xem 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 tựa phim có mã từ trong đó. Việc “mã” ở đầu, giữa hay cuối tiêu đề không quan trọng. Miễn là nó có 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ố lượng ký tự nào khác, chúng ta sẽ làm cách 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 siêu ký tự để đạt được kết quả mong muốn.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Thực thi đoạn script trên trong MySQL bàn làm việc so với myflixdb cung cấp 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 của chúng ta chịu trách nhiệm cho kết quả trên.
'^[abcd]' dấu mũ (^) có nghĩa là đối sánh mẫu phải được áp dụng ngay từ đầu và danh sách từ điển [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 từ chối NOT và xem kết quả chúng tôi sẽ nhận được sau khi thực hiện truy vấn của mình.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Thực thi đoạn script trên trong MySQL workbench so với myflixdb cung cấp 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 của chúng ta chịu trách nhiệm cho các kết quả trên.
'^[^abcd]' dấu mũ (^) có nghĩa là đối sánh mẫu phải được áp dụng ở đầu và danh sách từ điển [^abcd] có nghĩa là tiêu đề phim bắt đầu bằng bất kỳ ký tự kèm theo nào 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 biểu thức chính quy. Bây giờ chúng ta hãy xem xét các kết quả phù hợp với 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 tựa 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ẽ thực hiện việc đó 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 bằng cách sử dụng các biểu thức thông thường.
| Char | Mô tả Chi tiết | Ví dụ | |
|---|---|---|---|
| * | dấu hoa thị (*) siêu ký tự được sử dụng để khớp với 0 (XNUMX) hoặc nhiều phiên bản của chuỗi trước nó | CHỌN * TỪ phim Ở ĐÂU tiêu đề REGEXP 'da*'; sẽ cung cấp cho tất cả các phim có nhân vật “da”. Ví dụ: Da Vinci Code, Daddy's Little Girls. | |
| + | cộng (+) siêu ký tự được sử dụng để khớp với một hoặc nhiều phiên bản của chuỗi đứng trước nó. | CHỌN * TỪ `phim` Ở ĐÂU `title` REGEXP 'mon+'; sẽ cung cấp cho tất cả các phim có nhân vật “mon”. Ví dụ: Thiên thần và Ác quỷ. | |
| ? | Câu hỏi(?) siêu ký tự được sử dụng để khớp với số 0 (XNUMX) hoặc một phiên bản của các chuỗi đứng trước nó. | CHỌN * TỪ `danh mục` Ở ĐÂU `tên_danh mục` REGEXP 'com?'; sẽ đưa ra tất cả các danh mục chứa chuỗi com. Ví dụ: hài, hài lãng mạn. | |
| . | chấm (.) siêu ký tự được sử dụng để khớp với bất kỳ ký tự đơn nào ngoại trừ một dòng mới. | CHỌN * TỪ phim Ở ĐÂU `year_released` REGEXP '200.'; sẽ cung cấp cho tất cả các bộ phim được phát hành trong những năm bắt đầu bằng các nhân vật “200”, theo sau là bất kỳ nhân vật đơn lẻ nào. Ví dụ: 2005,2007,2008, v.v. | |
| [abc] | danh sách từ thiện [abc] được sử dụng để khớp với bất kỳ ký tự kèm theo nào. | CHỌN * TỪ `phim` Ở ĐÂU `title` REGEXP '[vwxyz]'; sẽ cung cấp 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, Mật mã Da Vinci, v.v. | |
| [^abc] | danh sách từ thiện [^abc] được sử dụng để khớp với bất kỳ ký tự nào ngoại trừ những ký tự được đính kèm. | CHỌN * TỪ `phim` Ở ĐÂU `title` REGEXP '^[^vwxyz]'; sẽ cung cấp tất cả các phim có chứa các nhân vật không phải là những nhân vật trong “vwxyz”. | |
| [AZ] | [AZ] được sử dụng để khớp với bất kỳ chữ cái viết hoa nào. | CHỌN * TỪ `thành viên` Ở ĐÂU `đị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 là 1. | |
| [az] | [az] được sử dụng để khớp với bất kỳ chữ cái viết thường nào | CHỌN * TỪ `thành viên` Ở ĐÂU `đị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 chính 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] | [0-9] được sử dụng để khớp bất kỳ chữ số nào từ 0 đến 9. | CHỌN * TỪ `thành viên` Ở ĐÂU `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 ngay từ đầu. | CHỌN * TỪ `phim` Ở ĐÂU `title` REGEXP '^[cd]'; cung cấp 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ô lập các lựa chọn thay thế. | CHỌN * TỪ `phim` Ở ĐÂU `title` REGEXP '^[cd]|^[u]'; cung cấp 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” hoặc “u”. Ví dụ: Code Name Black, Daddy's Little Girl, Da Vinci Code và Underworld – Awakening. | |
| [[:<:]] | [[:<:]] khớp với phần đầu của từ. | CHỌN * TỪ `phim` Ở ĐÂU `title` REGEXP '[[:<:]]for';
cung cấp 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. |
|
| [[:>:]] | [[:>:]] khớp với phần cuối của từ. | CHỌN * TỪ `phim` Ở ĐÂU `title` REGEXP 'ack[[:>:]]';
cung cấp tất cả các phim có tựa đề kết thúc bằng ký tự “ack” .Ví dụ: Tên mã Đen. |
|
| [:lớp học:] | [:lớp học:] phù hợp với một lớp nhân vật tức là
[: alpha:] để khớp các chữ cái, [:không gian:] để phù hợp với khoảng trắng, [: câu:] là khớp các dấu câu và [:upper:] cho các chữ cái hạng cao hơn. |
CHỌN * TỪ `phim` Ở ĐÂU `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ụ: Quên Sarah Marshal, X-Men, v.v. Phim như Cướp biển vùng Caribe 4 sẽ bị bỏ qua trong 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 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ổng kết
- Biểu thức chính quy cung cấp khả năng khớp 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 hiệu quả cho hệ thống cơ sở dữ liệu của mình.
- REGEXP là toán tử được sử dụng khi thực hiện so khớp 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 và kiểm soát tốt hơn khi thực hiện so khớp 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 mẫu khớp nếu đã sử dụng dấu gạch chéo ngược kép.
- Biểu thức chính quy không phân biệt chữ hoa chữ thường.
