6
votes

Python Regex pour correspondre à l'adresse IP avec / cidr

m = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",s)
How do I modify it so it will match not only IPv4, but also something with CIDR like 10.10.10.0/24?

0 commentaires

8 Réponses :


0
votes

Ajouter "(?: / \ d {1,2})?" .

qui vous obtient r "\ d {1,3} \. \ d {1,3} \. \ d {1,3} \. \ d {1,3} (?: / \ D {1,2})? " pour un motif.


0 commentaires

0
votes

Ceci étend votre expression existante xxx


0 commentaires

5
votes

(?: \ d {1,3} \.) {3} \ d {1,3} (?: / \ d \ d?)?


2 commentaires

400.123.34.56 est égalé mais non valide (mais la regex d'Asdasdasd a le même problème))


Juste FYI, le '/' peut avoir besoin d'être échappé dans des langues telles que JavaScript.



3
votes

\ d {1,3} \. \ d {1,3} \. \ d {1,3} \. \ d {1,3} (?: / \ d {1,2 } |)

testé dans Expresso

correspondance : xxx


0 commentaires

1
votes

J'ai eu des problèmes en utilisant une regex similaire à la vôtre. Il correspondait à 1.2.3.4.5 (comme 1.2.3.4) et 1111.2.3.4 (comme 111.2.3.4). Pour éviter de correspondre à ceux-ci, j'ai ajouté regarder à l'avance / derrière assertions: xxx

(? vérifie que Il n'y a pas de numéro ou d'octet avant votre premier octet (c.-à-d. N ° 1 avant 111.2.3.4). Et (?! \ D | (?: \. \ D)) vérifie qu'il n'y a pas de numéro / octet après votre dernier (c.-à-d .: no .5 après 1.2.3.4).

Ensuite, pour vérifier que les chaînes de ces correspondances sont valides IPS valides (par exemple: non 277.1.1.1), vous pouvez utiliser

socket.inet_aton (IP) #raises exception si IP est invalide


0 commentaires

0
votes

Il existe une fonction All_Matching_CIDRS (IP, CIDRS) dans le module IP de Neaddr. Il prend une adresse IP et la correspondre à une liste des adresses de la CIDR.


0 commentaires

1
votes

Il suffit de faire une très belle regex qui vérifie également la correction du format IP, n'est pas trop longue et correspond à la longueur de sous-réseau éventuellement:

(25[0-5]|2[0-4]\d|1\d\d|\d\d|\d).(?1).(?1).(?1)\/?(\d\d)?


1 commentaires

Encore mieux: '\ b (25 [0-5] | 2 [0-4] \ d \ b | 1 \ d \ d | \ d \ d | \ d) \ b \. \ B (? 1) \ b \. \ b (? 1) \ b \ \ \ b (? 1) \ b \ b (\ / \ d \ d | \ / \ d)? \ b '



1
votes

Regex (IP_Address avec / sans CIDR)

Essayez ceci: xxx

sortie:

oui, adresse IP 0.0.0.0/0 € 0 est correct

Oui, adresse IP 255.255.255.255/21 est correct

Oui, adresse IP 17.2.5.0/21 est correct

oui, Adresse IP 29.29.206.99 est correct

Non, adresse IP est incorrecte


0 commentaires