Maison  >  Questions et réponses  >  le corps du texte

Problème : expression régulière MySQL (le limiteur ne fonctionne pas)

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粉684720851P粉684720851179 Il y a quelques jours268

répondre à tous(1)je répondrai

  • P粉242535777

    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^

    • Au début de dans l'expression régulière, ^ 将处理“锚定”在开头: REGEXP "^x" 表示“以 x 开头”;如果“x”位于字符串中的任意位置,则 REGEXP "x" réussit.
    • Au début du "charset", ^ 表示“不”: REGEXP "x[0-9]" 查找 x 后紧跟一个数字' REGEXP "x[^0-9]" recherche x et non le numéro qui le suit immédiatement.

    répondre
    0
  • Annulerrépondre