Bài đăng nổi bật


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 phù hợp với tiêu chí phức tạp. Chúng tôi đã xem 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 đó, bạn có thể hỏi tại sao học các biểu thức chính quy khi bạn có thể nhận đượ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 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 khớp với tiêu chí thậm 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 -
  • "SELECT statements..." là câu lệnh CHỌN tiêu chuẩn
  • "WHERE fieldname"  là tên của cột mà biểu thức chính sẽ được thực hiện trên đó.
  • "REGEXP 'pattern'" REGEXP là toán tử biểu thức chính quy và 'mẫu' đại diện cho mẫu được khớp với REGEXP. RLIKE 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, tốt hơn là 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 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 các bộ phim bắt đầu bằng a, b, c hoặc d, theo sau là bất kỳ số lượng nhân vậ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 một biểu thức chính quy cùng với các siêu ký tự để đạt được kết quả mong muốn.
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

'^ [abcd]' dấu mũ (^) có nghĩa là khớp mẫu nên được áp dụng ở đầu và danh sách [abcd] có nghĩa là chỉ các tiêu đề phim bắt đầu bằng a, b, c hoặc d đượ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 KHÔNG và xem kết quả chúng tôi sẽ nhận được sau khi thực hiện truy vấn của chúng tôi.
SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';
Việc thực thi đoạn script trên trong bàn làm việc của MySQL đối với myflixdb cho chúng ta các kết quả sau.
movie_idtitledirectoryear_releasedcategory_id
1Pirates of the Caribean 4Rob Marshall20111
2Forgetting Sarah MarshalNicholas Stoller20082
3X-Men2008
9Honey moonersJohn Schultz20058
1667% Guilty2012
17The Great DictatorChalie Chaplie19207
18sample movieAnonymous8
19movie 3John Brown19208
Bây giờ chúng ta hãy xem xét kỹ biểu hiện thường xuyên của chúng tôi chịu trách nhiệm về các kết quả trên.
'^ [^ abcd]' dấu mũ (^) có nghĩa là khớp mẫu nên được áp dụng ở đầu và danh sách [^ abcd] có nghĩa là các tiêu đề phim bắt đầu bằng bất kỳ ký tự kèm theo nào được loại trừ khỏi tập kết quả.

Những gì chúng ta đã xem trong ví dụ trên là hình thức đơn giản nhất của biểu thức chính quy. Bây giờ chúng ta hãy xem các mẫu biểu thức chính quy tiên tiến 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ỉ bằng cách sử dụng một biểu thức thông thường, chúng ta sẽ làm thế nào về nó? Câu trả lời là siêu nhân vậ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ác biểu thức thông thường.

CharSự miêu tảThí dụ  
*Các metacharacter dấu hoa thị (*) được sử dụng để khớp với 0 (0) hoặc nhiều phiên bản của chuỗi trước nóSELECT * FROM movies WHERE title REGEXP 'da*'; sẽ cung cấp cho tất cả các bộ phim có chứa các nhân vật "da". Ví dụ hay, Da Vinci Code , Daddy's Little Girls.
+Các metacharacter cộng (+) được sử dụng để khớp với một hoặc nhiều trường hợp chuỗi trước nó.SELECT * FROM `movies` WHERE `title` REGEXP 'mon+';sẽ cung cấp cho tất cả các bộ phim có chứa các ký tự "mon". Ví dụ, Angels and Demons.
?Câu hỏi (?) Metacharacter được sử dụng để khớp với số không (0) hoặc một trường hợp của chuỗi trước nó.SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; sẽ cung cấp cho tất cả các thể loại có chứa chuỗi com. Ví dụ, comedy , romantic comedy.
.Các dấu chấm (.) Metacharater được sử dụng để phù hợp với bất kỳ ký tự đơn trong ngoại lệ của một dòng mới.SELECT * FROM movies WHERE `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 ký tự "200", theo sau là bất kỳ nhân vật nào. Ví dụ, 2005,2007,2008, v.v.
[abc]Danh sách [abc] được sử dụng để khớp với bất kỳ ký tự kèm theo nào.SELECT * FROM `movies` WHERE `title` REGEXP '[vwxyz]'sẽ cung cấp cho tất cả các bộ phim có chứa bất kỳ nhân vật nào trong "vwxyz". Ví dụ hay, X-Men, Da Vinci Code,  v.v.  
[^ abc]Danh sách [^ abc] được sử dụng để khớp với bất kỳ ký tự nào trừ các ký tự được đính kèm.SELECT * FROM `movies` WHERE `title` REGEXP '^[^vwxyz]';  sẽ cung cấp cho tất cả các bộ phim có chứa các nhân vật khác với những nhân vật trong "vwxyz".
[A-Z]Các [A-Z] được sử dụng để phù hợp với bất kỳ chữ hoa.SELECT * FROM `members` WHERE `postal_address` REGEXP '[a-z]'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ụ hay, Janet Jones with membership number 1.
[a-z]Các [a-z] được sử dụng để phù hợp với bất kỳ chữ thườngSELECT * FROM `members` WHERE `postal_address` REGEXP '[a-z] 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 with membership number 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.SELECT * FROM `members` 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 các ký tự" [0-9] ". Ví dụ hay, Robert Phil.
^Dấu mũ (^) được sử dụng để bắt đầu trận đấu lúc bắt đầu.SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]'; cung cấp cho tất cả các bộ phim có tiêu đề bắt đầu bằng bất kỳ nhân vật nào trong "cd". Ví dụ hay, Code Name Black, Daddy's Little Girls and Da Vinci Code.
|Thanh dọc (|) được sử dụng để cách ly các lựa chọn thay thế.SELECT * FROM `movies` WHERE `title` REGEXP '^[cd]|^[u]';  cung cấp cho tất cả các bộ 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ụ hay, Code Name Black, Daddy's Little Girl, Da Vinci Code and Underworld - Awakening.
[[:<:]]Các [[:<:]] phù hợp với đầu từ.SELECT * FROM `movies` WHERE `title` REGEXP '[[:<:]]for'; cung cấp cho tất cả các bộ phim với tiêu đề bắt đầu với các nhân vật. Ví dụ: orgetting Sarah Marshal.
[[:>:]]Các [[:>:]] phù hợp với cuối từ.SELECT * FROM `movies` WHERE `title` REGEXP 'ack[[:>:]]';  cung cấp cho tất cả các bộ phim có tiêu đề kết thúc bằng các ký tự "ack". Ví dụ hay, 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.SELECT * FROM `movies` WHERE `title` REGEXP '[:alpha:]';  cung cấp cho tất cả các bộ phim có tiêu đề Forgetting Sarah Marshal, X-Men etc. Movie like 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 làm 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 kép (\\)

Tóm lược

  • Biểu thức chính quy cung cấp một kết hợ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 năng lượng cho các 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 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ố ký tự đại diện cho phép linh hoạt và kiểm soát hơn khi thực hiện khớp mẫu.
  • Dấu gạch chéo ngược được sử dụng như một ký tự thoát trong các biểu thức thông thường. Nó chỉ được xem xét trong kết quả khớp mẫu nếu sử dụng dấu gạch chéo kép.
  • Biểu thức thông thường không phân biệt chữ hoa chữ thường.


Post a Comment

Mới hơn Cũ hơn