Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tìm kiếm Biểu thức chính quy Mysql không có ký tự lặp lại

Vì MySQL không hỗ trợ các nhóm thu tham chiếu ngược nên giải pháp điển hình của (\w).*\1 sẽ không làm việc. Điều này có nghĩa là bất kỳ giải pháp nào được đưa ra sẽ cần phải liệt kê tất cả các bộ đôi có thể có. Hơn nữa, theo như những gì tôi có thể nói thì tham chiếu ngược không hợp lệ trong việc nhìn trước hoặc nhìn sau, và nhìn trước và nhìn sau không được hỗ trợ trong MySQL.

Tuy nhiên, bạn có thể chia điều này thành hai biểu thức và sử dụng truy vấn sau:

SELECT * FROM words
WHERE word REGEXP '^[SEPIAN]{1,6}$'
AND NOT word REGEXP 'S.*?S|E.*?E|P.*?P|I.*?I|A.*?A|N.*?N'

Không đẹp lắm, nhưng nó hoạt động và cũng khá hiệu quả.

Để hỗ trợ giới hạn đã đặt của các ký tự lặp lại, hãy sử dụng mẫu sau cho biểu thức phụ của bạn:

A(.*?A){X,}

Ở đâu A là ký tự của bạn và X là số lần nó được phép.

Vì vậy, nếu bạn đang thêm một N khác vào chuỗi của bạn SEPIANN (tổng cộng là 2 N s), truy vấn của bạn sẽ trở thành:

SELECT * FROM words
WHERE word REGEXP '^[SEPIAN]{1,7}$'
AND NOT word REGEXP 'S.*?S|E.*?E|P.*?P|I.*?I|A.*?A|N(.*?N){2}'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tham chiếu nhiều khóa ngoại php mysql

  2. Tên bảng thoát MySQL

  3. Sử dụng vai trò mới trong MySQL 8

  4. Navicat dành cho MySQL

  5. Chuẩn SQL nói gì về dấu ngoặc đơn trong câu lệnh SQL UNION / EXCEPT / INTERSECT?