2016-04-25 9 views
0

Die ersten drei Zeichen müssen Großbuchstaben sein, ausgenommen I, O, S oder Z. Dann ein Strich dann vier Zeichen, die alles andere als 3 sein können. Ich habe dies aber das erste negative Lookahead erfasst auch Dinge außerhalb der ersten einfangenden Gruppe.Mehrere negative Lookahead

^((?!.*[IOSZ])[A-Z]{3})-((?!.*3)(.{4}))$ 

Ich möchte zum Beispiel AAA-444Z erfassen.

Antwort

0

Sie .* von Ihrem Vorgriff entfernen sollten, da Sie wollen um 3 Zeichen zu entsprechen und die Grenzzahl aus der Fanggruppe zu setzen. Verwenden Sie auch eine negierte Zeichenklasse für den letzten Teil:

^((?![IOSZ])[A-Z]){3}-[^3]{4}$ 

Demo

Wenn Sie zwei negative Vorgriffs verwenden möchten verwenden folgende:

^((?![IOSZ])[A-Z]){3}-((?!3).){4}$ 

Demo

Beachten Sie, dass der Punkt Wenn Sie Look-Around verwenden, möchten Sie angeben, dass ein Muster durch ein spezielles Muster folgt oder vorangeht und wann Sie es linieren möchten t Die Anzahl der Zeichen, die Sie brauchen, um die Regex-Engine zu sagen, um die Einschränkung für das gesamte Look-Around-basierte Muster zu berücksichtigen. In der ersten (?![IOSZ])[A-Z]) und in der zweiten ((?!3).).

+0

Dank ich möchte dies mit zwei negativen Lookaheads tun, um den Mechanismus zu verstehen – ocram

+1

@ocram Check out the edit. – Kasramvd

+0

'^ ((?! [IOSZ]) ([AZ] {3})) - ((?! 3) (. {4})) $' würde es auch tun – ocram

0

Sie brauchen keinen Look-Ahead für diese Anforderung, wie Sie diesen Regex verwenden können:

^[A-HJ-NP-RT-Y]{3}-[^3]{4}$ 
  • [A-HJ-NP-RT-Y]{3} 3 Fälle von Großbuchstaben übereinstimmen, die nicht I, O, S or Z sind.
  • [^3]{4} passt auf jedes Zeichen, das nicht 3 ist.

RegEx Demo

Wie pro Kommentar unten, wenn Sie wirklich negative Lookaheads wollen nur dann verwenden:

^(?:(?![IOSZ])[A-Z]){3}-(?:(?!3).){4}$ 

Regex Demo 2

+0

danke. Ich möchte es mit negativem Lookahead machen, um das im Allgemeinen zu verstehen, um eine Frage nicht zu beantworten. – ocram

+0

OK Überprüfen Sie die aktualisierte Antwort für Lookahead Regex. – anubhava

+1

vielen dank! Ich wusste nicht von nicht einfangenden Gruppen – ocram