Leçons du module (3/4)
Extraire des URL et des IP
Dans un texte libre (journaux/logs, articles, dumps), il est courant de vouloir extraire des URLs et des adresses IP. Voyons des motifs robustes pour les deux.
URLs http/https
Pattern: https?:\/\/[\w.-]+(?:\:\d+)?(?:\/[^\s]*)?https?:\/\/-- schéma, avec lesfacultatif.[\w.-]+-- hôte (domaine, sous-domaines, éventuellementlocalhost).(?:\:\d+)?-- port facultatif.(?:\/[^\s]*)?-- chemin facultatif, jusqu'au premier espace blanc.
Capture https://example.com, http://localhost:3000/api/users, https://docs.dev/path/sub.
IPv4
Une adresse IPv4 est constituée de 4 octets décimaux séparés par des points :
Pattern: \b(?:\d{1,3}\.){3}\d{1,3}\bVersion "suffisamment bonne" : elle accepte également des valeurs invalides comme 999.999.999.999. Pour la version stricte, il faudrait une alternance de plages (25[0-5]|2[0-4]\d|[01]?\d\d?), ce qui est beaucoup plus long.
Pattern (strict) : \b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\bPrécision versus brièveté
La correspondance des URLs ou des adresses IP nécessite d'équilibrer la tolérance du motif. Un validateur IP strict vérifie qu'aucun octet ne dépasse 255. Un extracteur pratique, en revanche, recherche généralement des motifs simplifiés et délègue la validation fine à un code dédié.
À vous de jouer
Trouvez chaque URL http ou https dans le texte. Schéma + hôte + chemin facultatif.
Afficher l'indice
https? pour le s facultatif, [\w.-]+ pour le domaine, et un groupe (?:\/[^\s]*)? pour le chemin facultatif.
Solution disponible après 3 tentatives
Exercice de révision
Trouvez chaque IPv4 (4 octets décimaux séparés par des points). Version permissive, sans vérification de 0-255.
Afficher l'indice
Utilisez (?:\d{1,3}\.){3} pour répéter 'octet + point' 3 fois, puis \d{1,3} pour le dernier.
Solution disponible après 3 tentatives
Défi supplémentaire
Trouvez toutes les adresses IPv4 au format `X.X.X.X` (composées de quatre nombres de 1 à 3 chiffres séparés par des points).
Afficher l'indice
Utilisez \b pour forcer les limites, (?:\d{1,3}\.){3} pour répéter l'octet et le point trois fois, et enfin \d{1,3}.
Solution disponible après 3 tentatives