ich brauche einmal Unterstützung zum Aufbau eines Regex Regelsatzes.
Ich bin gerade dabei IP Regeln zu identifizieren. Also...
einzelne IP-Adresse z.b. 10.10.1.10
Code: Alles auswählen
re.compile(r"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$")
Code: Alles auswählen
re.compile(r"^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))-((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))$")
Einen letzten Punkt habe ich noch offen. Eine Angabe mit Platzhalterzeichen "*" (egal wo) 10.10.*.10, sowie auch 10.10.10.*, etc...
In dieser Regex Regel möchte aber "vollständige" IP-Adressen sowie eine Angabe von *.*.*.* ausschließen.
In der Theorie im Kopf kein Problem

Mein bisher bestes Ergebnis sieht folgendermaßen aus...
Code: Alles auswählen
^((\*|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(\*|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(\*|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(\*|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?<=(.*\*|.*\*.*|\*.*){1,3}))$
Dies war aber auch nur ein Zufallstreffer, das diese so funktioniert. Es wird aber noch trotzdem noch *.*.*.* erkannt.
ich weiß nicht ob/wie mir ein lookahead hier hilft, oder ob es möglich ist ein backreference am Ende nochmal auf die Anzahl der Platzhalterzeichen auszuwerten.
Wenn mir da jemand mal auf die Sprünge helfen könnte wär dies genial.

Sollte ich zwischenzeitlich eine Lösung finden, so ergänze ich dies natürlich hier.
Edit:
Zwar noch keine Lösung. Aber gerade bin ich auf die Idee gekommen. Ich geh den anderen Weg. Benutze einen Negativ Lookahead wie...
Code: Alles auswählen
(?!\d\.\d\.\d\.\d|\*\.\*\.\*\.\*)
Viele Grüße
Chris