Maison > Questions et réponses > le corps du texte
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
P粉2425357772024-04-03 00:54:29
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; -- pass
Les 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.