Heim  >  Fragen und Antworten  >  Hauptteil

Problem: Regulärer MySQL-Ausdruck (Limiter funktioniert nicht)

Mod-Hinweis: Nicht löschen/nicht schließen Ich habe diese Frage schon einmal gestellt und der Administrator hat sie geschlossen, weil er dachte, dass sie der Frage eines anderen Benutzers ähnelt. Ich habe mir den Thread angesehen, den sie mir empfohlen hatten, und er enthielt nicht die Art von numerischen Problemen, die ich hatte. Wie gleicht dieser Thread eine ganze Zeichenfolge mit einem regulären Ausdruck ab?


Meine Fragen/Probleme: REGEXP gibt ein falsches Positiv zurück.

SELECT '123456' REGEXP '[0-9]{1,4}' AS Test;

Nach meiner Lesart bedeutet der Teil mit den geschweiften Klammern {1,4}, dass er mindestens einmal und höchstens viermal vorkommt. Aus dem oben Gesagten geht jedoch hervor, dass der Bereich [0-9] häufiger vorkommt als 4, die Abfrage jedoch 1 statt 0 zurückgibt. Ich habe den Screenshot angehängt. Was vermisse ich? Danke.

Screenshot eines Beispiels in Workbench

P粉684720851P粉684720851180 Tage vor276

Antworte allen(1)Ich werde antworten

  • P粉242535777

    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 紧随其后的数字。

    Antwort
    0
  • StornierenAntwort