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