Ich entwickle ein Docker-Projekt, muss eine Regex schreiben, um den Repository-Namen zu überprüfen. Anforderung wie folgt:
Dann ist meine Regex:
%Vor% Es kann jedoch nicht OK sein, wenn der Name des Repositorys e-e_1.1
Wenn ich es ändere zu:
%Vor%es ist OK.
Gibt es jemanden, der das erklären kann? Vielen Dank im Voraus.
Im ([a-z0-9]+(?:[._-][a-z0-9]+)*){2,255}
Regex wird der begrenzende Quantor {2,255}
auf das gesamte Muster in Gruppe 1 ( [a-z0-9]+(?:[._-][a-z0-9]+)*
) angewendet. Es bedeutet, dass es 2 bis 255 mal wiederholt werden kann. Es bedeutet nicht, dass die gesamte Stringlänge auf 2 bis 255 Zeichen beschränkt ist.
Nun kann Ihre [a-z0-9]+(?:[._-][a-z0-9]+)*{2,255}
Regex auch unbegrenzte Zeichen enthalten, da die mit [a-z0-9]+
übereinstimmende Zeichenfolge 1 oder mehr Zeichen haben kann. (?:[._-][a-z0-9]+)*
kann null oder mehr Zeichen enthalten. Der begrenzende Quantor {2,255}
funktioniert hier nicht so wie Sie es brauchen.
Um die Länge der Eingabezeichenfolge auf 2 bis 255 Zeichen zu beschränken, müssen Sie ein Lookahead verwenden, das am Anfang verankert ist:
%Vor% Der (?=.{2,255}$)
lookahead wird nur einmal am Anfang des Strings ausgeführt und eine Übereinstimmung wird nur gefunden, wenn die Bedingung im Lookahead erfüllt ist: es müssen 2 bis 255 Zeichen sein ( .
stimmt mit anderen Zeichen überein) als ein Newline, aber es ist nicht wichtig, da Sie nur bestimmte Zeichen im übereinstimmenden Muster später erlauben) bis zum Ende der Schnur.