MySQL Regex用于匹配3个相同的字符,但不能在更大的字符串中匹配4个相同的字符

我试图在
PHP中为mysql编写一个正则表达式来查找(至少出现一次)连续3个相同字符,但不是4个(或更多)相同的字符.

例如“000”我想找到:

> 0 ////// 0/00 / LS /////// 000
> 000 //// 0/00 / LS //////////
> 0 ////// 0/00 / LS //// 000 ///
> 0 ////// 000 // LS ////// 000 /
> 0 ////// 000 // LS // 00000000

但不是:

> 0 ////// 0000 / LS //////////
> 0 ////// 0000 / LS //////////
> 0 ///// 00000 / LS //////////

我已经尝试过下面的代码,我认为它会匹配前面有3个零,后面跟着零或更多不是0的字符,但这导致一些行有单个0和一些000000的

REGEXP '[^0]*[0{3}][^0]*'

非常感谢.

最佳答案 如果您打算在MySQL中使用正则表达式,则不能使用外观.因此,您可以使用带有否定字符类和锚点的交替:

(^|[^0])0{3}([^0]|$)

regex demo

说明:

>(^ | [^ 0]) – 匹配字符串(^)的开头或0以外的字符的组
> 0 {3} – 正好为3个零
>([^ 0] | $) – 匹配0以外的字符或字符串结尾($)的组.

点赞