Erklärung von Lookaheads in diesem regulären Ausdruck

7

Ich verstehe reguläre Ausdrücke ziemlich gut, aber ich benutze sie nicht oft genug, um ein Experte zu sein. Ich bin über einen regulären Ausdruck gestolpert, den ich verwende, um die Passwortstärke zu überprüfen, aber er enthält einige Regex-Konzepte, mit denen ich nicht vertraut bin. Die Regex ist:

%Vor%

und in einfachem Englisch bedeutet dies, dass die Zeichenfolge mindestens ein Kleinbuchstabe, ein Großbuchstabe und eine Zahl enthalten muss und die Zeichenfolge mindestens sechs Zeichen lang sein muss. Kann mir jemand das erklären, um zu erklären, wie dieses Muster diese Regel tatsächlich beschreibt? Ich sehe einen Anfang von Zeichenkette char ^ und ein Ende von Zeichenkette char $, drei Gruppen mit Lookaheads, eine Übereinstimmung mit einem beliebigen Zeichen. und eine Wiederholung {6,}.

Danke an jeden Regex-Guru, der mir helfen kann, meinen Kopf dazu zu bringen.

    
Rich Miller 06.08.2009, 20:17
quelle

5 Antworten

14

Unter normalen Umständen entspricht ein Teil eines regulären Ausdrucks einem Teil der Eingabezeichenfolge und "konsumiert" dieses Teil der Zeichenfolge. Der nächste Teil des Ausdrucks entspricht dem nächsten Teil der Zeichenfolge usw.

Lookahead-Assertions nicht verbrauchen einen String, also Ihre drei Lookahead-Assertions:

  • (?=.*\d)
  • (?=.*[a-z])
  • (?=.*[A-Z])

bedeuten "Dieses Muster (alles gefolgt von einer Ziffer, einem Kleinbuchstaben, bzw. einem Großbuchstaben) muss irgendwo in der Zeichenkette erscheinen", aber sie verschieben die aktuelle Spielposition nicht vorwärts, so dass der Rest der Ausdruck:

  • .{6,}

(was "sechs oder mehr Zeichen" bedeutet) muss immer noch mit der gesamten Eingabezeichenfolge übereinstimmen.

    
RichieHindle 06.08.2009, 20:23
quelle
5

Die Lookahead-Gruppe verbraucht die Eingabe nicht. Auf diese Weise werden die gleichen Zeichen tatsächlich von den verschiedenen Lookahead-Gruppen abgeglichen.

Sie können es sich so vorstellen: Suchen Sie nach etwas ( .* ), bis Sie eine Ziffer gefunden haben ( \d ). Wenn Sie dies tun, gehen Sie zurück zum Anfang dieser Gruppe (das Konzept des Lookahead). Suchen Sie nun nach etwas ( .* ), bis Sie einen Kleinbuchstaben gefunden haben. Wiederholen Sie für Großbuchstaben. Passen Sie nun 6 oder mehr Zeichen an.

    
Sinan Taifour 06.08.2009 20:25
quelle
4

Um es vollständig zu brechen.

%Vor%     
Sean Vieira 06.08.2009 20:29
quelle
1

Ich ging und überprüfte, wie dies bei Verwendung von Perl zusammenpassen würde:

%Vor%

%Vor%

%Vor%

Ich habe die Ausgabe leicht modifiziert

    
Brad Gilbert 06.08.2009 20:41
quelle
-1

Mit den Look-Ahead-Assertions wird sichergestellt, dass in der Zeichenfolge mindestens eine Ziffer, ein Kleinbuchstabe und ein Großbuchstabe enthalten sind.

    
Gumbo 06.08.2009 20:20
quelle

Tags und Links