我想在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上正常工作。
答案 0 :(得分:1)
那可能是:
(.)\1{2}
不幸的是,MySQL正则表达式不支持反向引用,因此将无法正常工作。
我想您必须手动定义所有受支持的组合,并将其显式放入正则表达式中,例如:
(000)|(111)|(222)|...|(999)|(aaa)|(bbb)|...|(zzz)
(您需要将...替换为所有其他模式)
如果要标识仅包含3个相似字符且没有其他字符的字符串,请在正则表达式的开头添加«^^»,在末尾添加«$$»。
答案 1 :(得分:0)
尝试一下:
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