Mysql
 sql >> база данни >  >> RDS >> Mysql

Търсене в Mysql Regular Expression без повтарящи се знаци

Тъй като MySQL не поддържа групи за улавяне с обратна препратка, типичното решение на (\w).*\1 няма да работи. Това означава, че всяко дадено решение ще трябва да изброи всички възможни двойници. Освен това, доколкото мога да преценя, обратните препратки не са валидни в предварителния или поглед-зад, а погледа напред и огледа назад не се поддържат в MySQL.

Можете обаче да го разделите на два израза и да използвате следната заявка:

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'

Не е много красиво, но работи и също трябва да е доста ефикасно.

За да поддържате зададено ограничение от повтарящи се знаци, използвайте следния модел за вашия вторичен израз:

A(.*?A){X,}

Където A е вашият герой и X е колко пъти е разрешено.

Така че, ако добавяте друг N към вашия низ SEPIANN (за общо 2 N s), вашата заявка ще бъде:

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. Пролетно зареждане - настройките на MySQL не работят

  2. MySQL REPLACE в автоматично увеличен ред

  3. Изчисляване на разликата в реда за дата и час между редовете в същата таблица

  4. MySQL в AWS EC2 - Как се мащабира?

  5. Запазване на прекъсвания на редове от TextArea при писане в MySQL