Bài viết sẽ hướng dẫn bạn cách sử dụng toán tử REGEXP
để tìm kiếm phức tạp dựa trên các biểu thức chính quy
Giới thiệu về biểu thức chính quy
Biểu thức chính quy [biểu thức chính quy] là 1 chuỗi đặc biệt mô tả các mẫu tìm kiếm. Nó là 1 công cụ mạnh mẽ cung cấp cho bạn cách rút gọn và linh hoạt để xác định các chuỗi văn bản. Ví dụ. các ký tự, và các từ dựa trên các mẫu
Đơn giản, bạn có thể sử dụng biểu thức chính quy để tìm email tìm kiếm, địa chỉ IP, số điện thoại hoặc bất kỳ thứ gì có mẫu cụ thể.
Biểu thức chính quy sử dụng cú pháp riêng mà có thể được giải thích bằng bộ xử lý biểu thức chính quy. Biểu thức chính quy được sử dụng rộng rãi trên hầu hết các nền tảng từ ngôn ngữ lập trình [Javascript, PHP, Python, …] đến cơ sở dữ liệu bao gồm cả MySQL
Ưu điểm của việc sử dụng REGEXP
hơn so với toán tử
SELECT
productname
FROM
products
WHERE
productname REGEXP '^[A|B|C]'
ORDER BY productname;
1 là không bị giới hạn tìm kiếm do việc cố định các mẫu tìm kiếm với dấu SELECT
productname
FROM
products
WHERE
productname REGEXP '^[A|B|C]'
ORDER BY productname;
0 và dấu gạch dưới SELECT
productname
FROM
products
WHERE
productname REGEXP '^[A|B|C]'
ORDER BY productname;
1. Biểu thức chính quy linh hoạt hơn trong việc tạo ra các mẫu tìm kiếmNhược điểm là nó rất khó hiểu và bảo trì với các mô hình phức tạp. Do đó, bạn nên mô tả ý nghĩa của biểu thức chính quy trong nhận xét của lệnh SQL. Hơn nữa, tốc độ trả về dữ liệu sẽ giảm đi nếu mẫu phức tạp trong biểu thức chính quy
Vì vậy hãy cân nhắc trước khi sử dụng biểu thức chính quy phức tạp
Viết tắt của biểu thức chính quy. regex hoặc regexp
REGEXP Toán tử
Đoạn mã bên dưới sử dụng toán tử REGEXP trong mệnh đề WHERE
SELECT
column_list
FROM
table_name
WHERE
string_column REGEXP pattern;
Lệnh thực thi công việc khớp mẫu của
SELECT
productname
FROM
products
WHERE
productname REGEXP '^[A|B|C]'
ORDER BY productname;
2 với SELECT
productname
FROM
products
WHERE
productname REGEXP '^[A|B|C]'
ORDER BY productname;
3Nếu giá trị của string_column khớp với mẫu thì biểu thức trong mệnh đề WHERE sẽ trả về true, ngược lại là false
Nếu hoặc chuỗi_cột hoặc mẫu là NULL, thì kết quả là NULL
Ngoài toán tử REGEXP, bạn có thể sử dụng toán tử RLIKE, tương đồng với toán tử REGEXP
Trái ngược với toán tử REGEXP is NOT REGEXP
Ví dụ sử dụng REGEXP
Giả sử bạn muốn tìm tất cả các sản phẩm với họ bắt đầu bằng chữ cái A, B hoặc C
SELECT
productname
FROM
products
WHERE
productname REGEXP '^[A|B|C]'
ORDER BY productname;
Giải thích mẫu 1 chút
- Kí tự^nghĩa là khớp từ ký tự đầu tiên của chuỗi
- Kí tự nghĩa là tìm kiếm các lựa chọn thay thế nếu như không phù hợp
Bảng sau miêu tả một số ký tự và cấu trúc thường được sử dụng trong biểu thức chính quy
MetacharacterBehavior ^khớp với vị trí đầu tiên của chuỗi được tìm kiếm $khớp tới vị trí cuối của chuỗi được tìm kiếm. khớp với bất kỳ ký tự nào […]khớp với bất kỳ ký tự nào chỉ được ra trong dấu ngoặc vuông [^…]khớp với bất kỳ ký tự nào không được ra trong dấu ngoặc vuông p1p2khớp với bất kỳ ký tự nào giữa các mẫuĐể tìm các sản phẩm có tên bắt đầu bằng ký tự
SELECT
productname
FROM
products
WHERE
productname REGEXP '^[A|B|C]'
ORDER BY productname;
4 thì dùng ký hiệu SELECT
productname
FROM
products
WHERE
productname REGEXP '^[A|B|C]'
ORDER BY productname;
5________số 8
Nếu bạn muốn toán tử REGEXP so sánh chuỗi phân biệt hoa thường thì bạn có thể sử dụng toán tử BINARY để ép kiểu chuỗi về kiểu chuỗi nhị phân
By because MySQL so sánh chuỗi nhị phân theo byte thay vì theo từng ký tự. Đồng nghĩa công việc của nó so sánh phân biệt hoa thường