Problem: Regulärer MySQL-Ausdruck (Limiter funktioniert nicht)
P粉684720851
P粉684720851 2024-04-02 23:35:21
0
1
425

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粉684720851
P粉684720851

Antworte allen(1)
P粉242535777
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 紧随其后的数字。
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage