Note du mod : Ne pas supprimer/ne pas fermer J'ai déjà posé cette question et l'administrateur l'a fermée car il pensait qu'elle était similaire à la question d'un autre utilisateur. J'ai regardé le fil de discussion qu'ils m'ont recommandé et il ne contenait pas le genre de problèmes numériques que j'avais. Comment ce fil fait-il correspondre une chaîne entière avec une expression régulière ?
Mes questions/problèmes : REGEXP renvoie un faux positif.
SELECT '123456' REGEXP '[0-9]{1,4}' AS Test;
D'après ma lecture, la partie accolades {1,4} signifie qu'elle apparaît au moins 1 fois et au maximum 4 fois. Mais d'après ce qui précède, la plage [0-9] apparaît plus souvent que 4, mais la requête renvoie 1 au lieu de 0. J'ai joint la capture d'écran. Qu'est-ce que je rate? Merci.
Capture d'écran d'un exemple dans Workbench
SELECT '123456' REGEXP '^[0-9]{1,4}$' AS Test;Avec « ancrage », vous demandez de faire correspondre la chaîne entière. L'opération ci-dessus échouera en raison de la limite de 4.
SELECT '123456' REGEXP '^[0-9]{1,}$' AS Test;Réussi car il autorise au moins les chiffres.
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; -- passLes deux derniers incluent
[^0-9], qui signifie « n'importe quel nombre sauf 0-9.Instructions détaillées^
^将处理“锚定”在开头:REGEXP "^x"表示“以 x 开头”;如果“x”位于字符串中的任意位置,则REGEXP "x"réussit.^表示“不”:REGEXP "x[0-9]"查找 x 后紧跟一个数字'REGEXP "x[^0-9]"recherche x et non le numéro qui le suit immédiatement.