問題:MySQL正規表示式(限制器不起作用)
P粉684720851
P粉684720851 2024-04-02 23:35:21
0
1
416

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


我的問題/問題: 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 緊接在後的數字。
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板