问题:MySQL正则表达式(限制器不起作用)
P粉684720851
P粉684720851 2024-04-02 23:35:21
0
1
423

模组注意事项:请勿删除/请勿关闭 我之前问过这个问题,管理员关闭了它,因为他们认为这与另一个用户的问题类似。我查看了他们向我推荐的线程,它不包含我遇到的那种数字问题。该线程是如何将整个字符串与正则表达式匹配?


我的疑问/问题: REGEXP 返回误报。

SELECT '123456' REGEXP '[0-9]{1,4}' AS Test;

根据我的阅读,大括号{1,4}部分表示最少出现1次,最多不超过4次。但是从上面来看,[0-9]范围的出现次数较多大于 4,但查询返回 1 而不是 0。我已附上屏幕截图。我缺少什么?谢谢。

Workbench 中示例的屏幕截图

P粉684720851
P粉684720851

全部回复(1)
P粉242535777
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 紧随其后的数字。
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板