MySQL REGEXP 3 раза повторяя символы - PullRequest
0 голосов
/ 28 января 2019

Я хочу найти строку в MySQL с 3 повторяющимися символами.Я прочитал все ответы, как здесь Regex, чтобы найти повторяющиеся числа , но он не работает с MySQL 5.7:

select  '211' REGEXP '(.)\1\1'; //true but I expect false

select  '211' REGEXP '(.)\1{2}'; // true but I expect false

select  '211' REGEXP '([[:alnum:]])\1\1'; //true but I expect false

select  '211' REGEXP '(\w)\1{2}'; //false but

select  '111' REGEXP '(\w)\1{2}'; // also false

ОБНОВЛЕНИЕ: Как проверено, он работает, как и ожидалось с MySQL 8.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Это могло бы быть:

(.)\1{2}

К сожалению, регулярные выражения MySQL не поддерживают обратные ссылки, поэтому это не будет работать.

Полагаю, вам придется вручную определять все поддерживаемые комбинациии явно поместите их в регулярное выражение, например:

(000)|(111)|(222)|...|(999)|(aaa)|(bbb)|...|(zzz)

(вам нужно заменить ... на все другие шаблоны)

Если вы хотите идентифицировать строки, содержащие только 3 похожихсимволы и ничего больше, добавьте «^» в начале регулярного выражения и «$» в конце.

0 голосов
/ 28 января 2019

Попробуйте:

select  '111' REGEXP '(\\w)\\1\\1'; 

Рабочая скрипка

Этот запрос протестирован на Mysql 8 и Maria DB 10

Для MySql 5.7 ИНиже я закончил с грязным обходным путем

select  
 CASE WHEN (
  @X:=SUBSTRING(C,1,1)) = @X and 
  @X=SUBSTRING(C,2,1) AND 
  @x=SUBSTRING(C,3,1)
 THEN 
  1 
 ELSE 
  0 
 END MyMatch
FROM
  (SELECT '111' c) T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...