Extraire une chaine

Fermé
ifr38 - 3 oct. 2014 à 09:03
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 3 oct. 2014 à 16:08
Bonjour a tous,

Je viens vers vous car je débute en perl et je n'arrive pas à résoudre mon problème..
J'ai une chaine :

[<HTML><HEAD><META URL=https://196.214.79.38"/></HEAD><BODY> Click here </BODY></HTML>]

et je voudrais pouvoir récupérer mon adresse IP uniquement.J'ai bien vu que les regex était super efficace en perl mais je n'arrive pas encore à bien les manier.

Merci,
A+

A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
3 oct. 2014 à 09:26
Bonjour,

Pour adapter cela en perl, je ne pourrais pas vous aider. Néanmoins, voici des pistes pour vous :
- Un tutoriel (en VBA mais on s'en fiche, c'est pour la démarche de compréhension) pour déterminer si une IP est valide : ICI
de ce tutoriel il en ressort la règle à appliquer à votre Regex :
 "^((25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(25[0-5]|2[0-4]\d|1?\d?\d)$" 

- un tutoriel sur l'application des Regex en Perl : https://formation-perl.fr/guide-perl-08.html

0
Ok merci, je vais allez y jeter un coup d'oeil :)
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 097
3 oct. 2014 à 11:20
Il faut enlever le ^ initial et le $ terminal pour que la regexp matche la ligne indiquée par ifr38, en outre, si l'on veut capturer l'adresse IP, il faudra rajouter des parenthèses autour de la regexp.

Si tu n'as pas besoin de valider l'adresse IP, mais juste de capturer des chiffres séparés par des points à la suite de https://, tu peux faire bien plus simple :

#!/usr/bin/perl

use strict;
use warnings;

my $st = '[<HTML><HEAD><META URL=https://196.214.79.38"/></HEAD><BODY> Click here </BODY></HTML>]';

if ($st =~ /(((25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(25[0-5]|2[0-4]\d|1?\d?\d))/) {
    printf("Adresse IP valide détectée : $1\n");
}

if ($st =~ /https:\/\/(\d+\.\d+\.\d+\.\d+)/) {
    printf("chiffres à la suite de http:// " .
        "séparés par 3 points détectés : $1\n");                                
}



Dal
0
Merci dal pour ce complément de réponse,
Qu'entends tu par "valider" l'adresse IP?
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 097
Modifié par [Dal] le 3/10/2014 à 16:11
La première regexp vérifie que des chiffres de 0 à 255 sont bien entre les points, c'est la raison de sa complexité. Une adresse 338.449.899.789 ne serait pas matchée, car invalide pour le protocole IPv4.

Si tu ne te soucies pas cela et que tu veux juste capturer les nombres séparés par 3 points suivant http://, tu peux faire plus simple en capturant justement cela. Cela ne vérifiera pas si l'adresse IP est une adresse pouvant être valide, mais cela sera plus lisible et plus rapide à l'exécution.


Dal
0