模组注意事项:请勿删除/请勿关闭 我之前问过这个问题,管理员关闭了它,因为他们认为这与另一个用户的问题类似。我查看了他们向我推荐的线程,它不包含我遇到的那种数字问题。该线程是如何将整个字符串与正则表达式匹配?
我的疑问/问题: REGEXP 返回误报。
SELECT '123456' REGEXP '[0-9]{1,4}' AS Test;
根据我的阅读,大括号{1,4}部分表示最少出现1次,最多不超过4次。但是从上面来看,[0-9]范围的出现次数较多大于 4,但查询返回 1 而不是 0。我已附上屏幕截图。我缺少什么?谢谢。
Workbench 中示例的屏幕截图
P粉2425357772024-04-03 00:54:29
SELECT '123456' REGEXP '^[0-9]{1,4}$' AS Test;
通过“锚定”,您要求匹配整个字符串。由于 4 的限制,上面的操作将会失败。
SELECT '123456' REGEXP '^[0-9]{1,}$' AS Test;
通过,因为它至少允许位数。
SELECT 'zzz123456' REGEXP '^[0-9]{1,}$' AS Test; -- Fail SELECT '123456' REGEXP '^[0-9]*$' AS Test; -- pass SELECT '' REGEXP '^[0-9]{1,}$' AS Test; -- fail (too short) SELECT '' REGEXP '^[0-9]+$' AS Test; -- same as {1,} SELECT 'abc123456def' REGEXP '[0-9]{1,4}' AS Test; -- pass (no anchor) SELECT 'abc123456def' REGEXP '^[^0-9]+[0-9]{1,4}[^0-9]+$' AS Test; -- fail SELECT 'abc123456def' REGEXP '[^0-9]*[0-9]+[^0-9]*' AS Test; -- pass
最后两个包括 [^0-9]
,这意味着“除了 0-9 之外的任何数字。
详细说明^
^
将处理“锚定”在开头: REGEXP "^x"
表示“以 x 开头”;如果“x”位于字符串中的任意位置,则 REGEXP "x"
成功。^
表示“不”: REGEXP "x[0-9]"
查找 x 后紧跟一个数字' REGEXP "x[^0-9]"
查找 x 不紧随其后的数字。