MySQL REGEXP 3次重复字符

时间:2019-01-28 19:37:32

标签: mysql sql regex

我想在mysql中找到3个重复字符的字符串。我在这里读到了所有答案,例如Regex to find repeating numbers,但不适用于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 :(得分:1)

那可能是:

(.)\1{2}

不幸的是,MySQL正则表达式不支持反向引用,因此将无法正常工作。

我想您必须手动定义所有受支持的组合,并将其显式放入正则表达式中,例如:

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

(您需要将...替换为所有其他模式)

如果要标识仅包含3个相似字符且没有其他字符的字符串,请在正则表达式的开头添加«^^»,在末尾添加«$$»。

答案 1 :(得分:0)

尝试一下:

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

Working Fiddle

此查询已在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