Oracle cung cấp hàm REGEXP_LIKE hỗ trợ cú pháp và hành vi tương tự cho các biểu thức chính quy, nhưng nó phân biệt chữ hoa chữ thường theo mặc định, vì vậy tham số 'i' là bắt buộc để khớp không phân biệt chữ hoa chữ thường
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 xét các ký tự đại diện trong hướng dẫn trước. Nếu bạn đã từng 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 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 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
- “WHERE fieldname” là tên của cột mà biểu thức chính quy sẽ được thực hiện trên đó
- “REGEXP 'mẫu'" REGEXP là toán tử biểu thức chính quy và 'mẫu' đại diện cho mẫu được khớp bở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 nó với toán tử LIKE, 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 “mã” ở đầu, giữa hay cuối 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 ký tự nào khác, chúng ta sẽ thực hiện như 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 các siêu ký tự để đạt được kết quả mong muốn
SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';
Thực thi đoạn mã trên trong bàn làm việc của MySQL đối với myflixdb mang lại cho chúng tôi các 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 về 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 ký tự [abcd] có nghĩa là chỉ những tựa phim bắt đầu bằng a, b, c hoặc d mới được trả về trong tập hợ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 NOT charlist 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 mã trên trong bàn làm việc của MySQL đối với myflixdb mang lại cho chúng tôi các 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à đối sánh mẫu phải được áp dụng ngay từ đầu và danh sách ký tự [^abcd] có nghĩa là tiêu đề phim bắt đầu bằng bất kỳ ký tự nào trong số các ký tự kèm theo sẽ bị loại 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 đố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ỉ bằng cách sử dụng một biểu thức chính quy, chúng ta sẽ thực hiện như thế nào? . 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 các biểu thức thông thường
CharDescriptionVí dụ*Siêu ký tự dấu hoa thị [*] được sử dụng để khớp với số không [0] hoặc nhiều phiên bản của các chuỗi trước nó CHỌN * TỪ phim WHERE tiêu đề REGEXP 'da*'; . Ví dụ, Da Vinci Code, Daddy’s Little Girls. +Dấu cộng [+] được sử dụng để so khớp với một hoặc nhiều thể hiện của chuỗi trước nó. CHỌN * TỪ `phim` Ở ĐÂU` tiêu đề` REGEXP '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 trước nó. CHỌN * TỪ `danh mục` WHERE `tên_danh mục` REGEXP 'com?'; . Ví dụ, hài kịch, hài lãng mạn. Dấu 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. ’; . Ví dụ: 2005,2007,2008, v.v. [abc]Danh sách xếp hạng [abc] được sử dụng để khớp với bất kỳ ký tự nào kèm theo. CHỌN * TỪ `phim` Ở ĐÂU` tiêu đề` REGEXP ‘[vwxyz]’; . Ví dụ, X-Men, Mật mã Da Vinci, v.v. [^abc]Bảng xếp hạng [^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` Ở ĐÂU` tiêu đề` REGEXP '^[^vwxyz]'; . [A-Z][A-Z] đượ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` WHERE `postal_address` REGEXP ‘[A-Z]’; . . Ví dụ, Janet Jones với số thành viên 1. [a-z][a-z] đượ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` WHERE `postal_address` REGEXP ‘[a-z]’; . . Ví dụ, Janet Jones với số thành viên 1. [0-9][0-9] được sử dụng để khớp với bất kỳ chữ số nào từ 0 đến 9. CHỌN * TỪ `thành viên` WHERE `số_liên_hệ` 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ụ, Robert Phil. ^Dấu mũ [^] được sử dụng để bắt đầu trận đấu ngay từ đầu. CHỌN * TỪ `phim` Ở ĐÂU` tiêu đề` REGEXP '^[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` tiêu đề` REGEXP ‘^[cd]. ^[u]’; . Ví dụ như Code Name Black, Daddy’s Little Girl, Da Vinci Code và Underworld – Awakening. [[. . ]]’;cung cấp cho tất cả các bộ phim có tiêu đề kết thúc bằng ký tự “ack”
Ví dụ, Tên mã Đen
[. lớp. ]Các [. lớp. ] khớp với một lớp ký tự i. e[. chữ cái. ] để ghép các chữ cái, [. khoảng trống. ] để khớp với khoảng trắng, [. dấu câu. ] là khớp dấu câu và [. phía trên. ] cho các chữ cái lớp trên
CHỌN * TỪ `phim` Ở ĐÂU` tiêu đề` REGEXP ‘[. chữ cái. ]’;cung cấp cho tất cả các bộ phim có tiêu đề chỉ chứa các chữ cái
Ví dụ: Quên Sarah Marshall, 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 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 ngược kép [\\]