IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

traduction d'une règle de regex pour les IP


Sujet :

C#

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut traduction d'une règle de regex pour les IP
    Bonjour

    j'ai trouvé sur une forum ce regex pour tester une adresse IP saisie par l'utilisateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Text.RegularExpressions.Regex.IsMatch(ipAddress,
                @"^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$");
    je n'ai pas réussi à mettre en défaut le test, il semble très bien fonctionner mais après 4h à essayer de le mettre à plat sur le papier je n'arrive pas à comprendre

    J'identifie 25[0-5]|2[0-4]\d|[0-1]?\d?\d qui revient 2 fois, à priori pour avant le premier point puis pour les 3 suivants mais pas moyen de traduire en bon français cette syntaxe.

    Quelqu'un peut me la traduire pour que j'arrive enfin à comprendre le principe du truc ?

    Merci par avance
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Il existe des sites pour ça ; par exemple avec regex101.com on voit sur la partie supérieure droite le détail de chaque élément et avec l'exemple fourni, ainsi que la note dans l'explication sur le second groupe de capture on constate que bien que ça "fonctionne" pour tester SI c'est valide ; pour en extraire les différentes partie c'est pas vraiment la même histoire.

    À noter sur un plan tout autre que personnellement quand je dois tester une IP j'ai tendance à préférer utiliser IPAddress.TryParse
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut
    Bon, même avec le site je comprends rien...
    Je viens de relire à tête reposée ce tuto http://stormimon.developpez.com/dotn...ns-regulieres/
    et j'y comprends toujours rien !
    c'est possible de faire un blocage sur une syntaxe ?

    pour l'adresse IP je suis d'accord que le tryparse est bien plus élégant. de toute manière avec regex même si j'arrive à comprendre dans 2 jours mon code me sera de nouveau incompréhensible !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Bon reprenons dans ce cas :

    commençons par la partie la plus simple ; si on supprime le "gros paquet" la structure générale est
    ^(XXX)(\.(XXX)){3}$
    soit, on matche XXX puis 3 fois un point suivi d'un truc qui matche XXX

    pour cette partie mise de côté on a
    25[0-5]|2[0-4]\d|[0-1]?\d?\d
    ce qui représente 3 alternatives différentes (dénotées par la barre verticale) :

    1ère alternative
    25[0-5]
    matchera 25 suivi d'un chiffre de 0 à 5 => donc matchera 250 251 252 253 254 255

    2ème alternative
    2[0-4]\d
    matchera 2 suivi d'un chiffre de 0 à 4 suivi d'un chiffre quelconque => donc matche un nombre compris entre 200 et 249

    3ème alternative
    [0-1]?\d?\d
    on le prend à l'envers celui là
    matchera un chiffre quelconque (\d) potentiellement précédé d'un autre chiffre (\d?) potentiellement précédé d'un 0 ou d'un 1 ([0-1]?)
    => donc matchera un nombre compris entre 0 et 199 (et les optionnels sont là pour gérer les représentations types 000 ou 099)

    au final ces 3 alternatives permettent de matcher un nombre entre 0 et 255 (ou 000 et 255 en tenant compte des optionnels) associé à la partie vue précédemment ça nous donne bien
    [000-255] suivi de 3 fois .[000-255] soit le format d'une IP.

    [000-255] signifie ici un nombre entre 000 et 255
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si ca peut te rassurer ca me parrait très abscons aussi
    j'ai jamais accroché aux regex
    surtout que dans beaucoup de cas on peut faire plus performant et plus lisible (certes pas en une seule ligne de code, et la lisibilité c'est subjectif comme on vient de le voir ^^)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut
    Merci pour ce beau découpage très claire
    Je suis bon pour reprendre le cours de stormimon à tête re-reposée et avertie...

    J'ai viré le regex dans mon code pour valider l'adresse IP déjà (vive le tryparse !)
    maintenant me reste à trouver comment accepter que des chiffre a à z A à Z plus -
    normalement ça ne doit pas être le regex le plus compliqué celui là niack niack

    merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  7. #7
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut
    Citation Envoyé par petitours Voir le message
    Je suis bon pour reprendre le cours de stormimon à tête re-reposée et avertie...
    Je te conseille plutôt le tutoriel de Louis-Guillaume Morand pour débuter (celui de stormimon insiste moins sur les bases et couvre des usages plus "avancés" des regex)

  8. #8
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut
    Merci pour cet autre tuto, peut être plus simple en effet !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  9. #9
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Il existe des sites pour ça ; par exemple avec regex101.com on voit sur la partie supérieure droite le détail de chaque élément et avec l'exemple fourni, ainsi que la note dans l'explication sur le second groupe de capture on constate que bien que ça "fonctionne" pour tester SI c'est valide ; pour en extraire les différentes partie c'est pas vraiment la même histoire.

    À noter sur un plan tout autre que personnellement quand je dois tester une IP j'ai tendance à préférer utiliser IPAddress.TryParse
    C'est clair que ce site est vraiment excellent je trouve, dès que j'ai des regex à créer je l'utilise pour mes tests, c'est vraiment top!

    @Pol63: je pensais comme toi jusqu'à il n'y a pas si longtemps, mais quand tu dois faire des recherches dans des fichiers texte de patterns qui peuvent varier (ce que je fais beaucoup depuis un an), ben en fait une fois qu'on a compris les bases, c'est vraiment très pratique je trouve!
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

Discussions similaires

  1. Une question de Layout pour les bons
    Par Alec6 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/03/2008, 09h53
  2. Réponses: 10
    Dernier message: 21/02/2008, 16h59
  3. Réponses: 4
    Dernier message: 16/01/2007, 15h27
  4. [RegEx] Regex pour les accents et autres
    Par yule dans le forum Langage
    Réponses: 4
    Dernier message: 21/08/2006, 15h47
  5. Réponses: 7
    Dernier message: 04/06/2006, 12h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo