Regex tìm kiếm toàn văn mysql

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ếm

Nhượ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;
3

Nế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;

Regex tìm kiếm toàn văn mysql

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

Regex tìm kiếm toàn văn mysql

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