搜尋

首頁  >  問答  >  主體

問題:MySQL正規表示式(限制器不起作用)

模組注意事項:請勿刪除/請勿關閉 我之前問過這個問題,管理員關閉了它,因為他們認為這與另一個用戶的問題類似。我查看了他們向我推薦的線程,它不包含我遇到的那種數字問題。該線程是如何將整個字串與正規表示式匹配?


我的問題/問題: REGEXP 傳回誤報。

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

根據我的閱讀,大括號{1,4}部分錶示最少出現1次,最多不超過4次。但從上方來看,[0-9]範圍的出現次數較高大於 4,但查詢回傳 1 而不是 0。我已附上螢幕截圖。我缺什麼?謝謝。

Workbench 中範例的螢幕截圖

P粉684720851P粉684720851228 天前362

全部回覆(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
  • 取消回覆