Bonjour,

J'ai créé un script/regex permettant de récupérer des adresses ip et de les ajoutées dans une base.

Je met par exemple le texte suivant dans mon formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
222.344.32.34:4567io bla bla bla avec ce 123.543.566.44:4540 etc
et cela extrait uniquement les adresses ip.

Script:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
<?php
 
$filename = "../dbconnect.php";
if (file_exists($filename)) include($filename);
 
if (isset($_REQUEST['text']) && !empty($_REQUEST['text'])) {
  // recupération du texte
  $text = $_REQUEST['text'];
}
 
// extraction ip
if (!empty($text)) {
  $res = preg_match_all(
    "/[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}/i",
    $text,
    $matches
  );
 
  if ($res) {
    foreach(array_unique($matches[0]) as $ip) {
 
$insertionBase = mysql_query("INSERT IGNORE INTO listeIp (adresseIp, DateInsertion) VALUES ('$ip', now())") or die ('Erreur SQL...veuillez contacter l\'administrateur'.mysql_error());   
 
    echo $ip . "<br />";
    }
  }
  else {
    echo "Aucune adresse ip trouvée";
  }
}
 
?>
Cela fonctionne bien...Par contre, maintenant j'aurai souhaité également récupérer le port associé à l'ip.

Il y a 3 situations possibles:

- Soit lorsque je récupère le texte, l'ip est séparée du port par un double point (111.111.111.11:1234)
- soit par un espace (11.111.11.11 2345)
- soit par 2 espacements (12.12.12.12 22)

Est il possible de récupérer le port de la même manière que l'ip?

j ai testé en faisant comme cela:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
  "/[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}[  : ]?[0-9]{1,5}$/i",
(cela fontionne s'il y a un espace ou un double point, mais avec 2 espaces cela retourne rien)

et

Code : Sélectionner tout - Visualiser dans une fenêtre à part
"/[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}[\s\s: ]?[0-9]{1,5}/i",
Dans ce 2eme cas, cela me retourne bien l'ip mais pas le port.

Je remplace les espaces par _ dans mon exemple ci dessous.

Exemple:

Je met 111.111.111.111__33 et cela me retourne 111.111.111.111

Qu'y a t-il comme erreur?

Merci