我正在尝试在我的数据库中找到普通信用卡号。
我想确保文字内容不包含信用卡。有些客户在提交报告时会输入信用卡 我试过了:
SELECT * FROM reports WHERE content RLIKE '\b(?:\d[ -]*?){13,16}\b';
它给了我这个错误
ERROR 1139(42000):从regexp获得错误'重复 - 运算符操作数无效'
我需要一些帮助。 感谢
答案 0 :(得分:0)
MySQL正则表达式语法不使用\b
作为字边界,它使用[[:<:]]
和[[:>:]]
。对于数字,它不使用\d
,而是使用[[:digit:]]
。它在组中也没有?:
前缀 - 它们不需要它们,因为它没有反向引用,因此捕获组和非捕获组之间没有区别。
但是您的错误消息的原因是它没有像*?
这样的非贪婪量词。
试试这个:
SELECT *
FROM reports
WHERE content RLIKE '[[:<:]]([[:digit:]][- ]?){13,16}[[:>:]]'
这匹配一个单词开头,13-16位数字,每个数字后面有一个可能的分隔符,后跟一个单词结束。