Regex Regel - identifiziere IP-Adresse NUR mit min einem Wildcard Zeichen
Verfasst: Montag 18. November 2024, 11:23
Hallo,
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
oder eine Angabe als Range wie 10.10.1.1-10.10.1.100
als Angabe mit Netzwerkmaske etc... alles soweit so gut.
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
Ich muss "nur" Prüfen, ob es mindestens einen bis max. 3 Platzhalterzeichen gibt...
Mein bisher bestes Ergebnis sieht folgendermaßen aus...
... dies Funktioniert insofern, das diese Regel "vollständige" Adresse wie 1.2.3.4 ignoriert. Hier war meine Idee einfach am Ende des normalen regex die erste Gruppe auf * Zeichen zu zählen.
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...
...damit würde ich, an der richtigen Stelle eingebaut, genau das gewünschte erreichen.
Viele Grüße
Chris
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