Heim > Fragen und Antworten > Hauptteil
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粉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 不紧随其后的数字。