首页  >  问答  >  正文

问题:MySQL正则表达式(限制器不起作用)

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


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

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

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

Workbench 中示例的屏幕截图

P粉684720851P粉684720851180 天前277

全部回复(1)我来回复

  • P粉242535777

    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 紧随其后的数字。

    回复
    0
  • 取消回复