Regex pour IP et code pays
Bonjour à tous,
Voici typiquement 2 lignes sur lesquels je dois appliquer ma fonction regex :
Code:
1 2
| 2009-01-15 11:17:26,700 WARNING [ssh] Ban 81.51.110.57 FR, France
2009-01-15 11:27:27,683 WARNING [ssh] Unban 81.51.110.57 |
Mon but final sera, dans le cas ou la ligne contient "Ban", d'extraire le nom du protocole (ici -> ssh), l'adresse IP et le code du pays (ici -> FR).
N'étant vraiment pas très doué en regex voila les patterns que j'ai trouvé sur le Web pour m'aider à débuter:
- pattern A : pour récupérer l'adresse IP
Code:
$patternA = '/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/';
- pattern B : pour récupérer le code pays
Code:
$patternB = '/\b(BE|DE|CH|AT|FR)\b/';
Maintenant j'aimerai fusionner les 2 patterns afin que je puisse récupérer l'adresse IP et le code pays avec un seul pattern.
Ci-dessous un exemple que j'ai testé, inspiré du cours de Guillaume sur les regex:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| //pour l'instant je test qu'avec la ligne qui m'intéresse
$line = "2009-01-15 11:37:04,794 WARNING [ssh] Ban 81.51.110.57 FR, France";
$patternA = '/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/';
$patternB = '/\b(BE|DE|CH|AT|FR)\b/';
$patternAB = '/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b.\b(DE|CH|AT|FR)\b/';
$matches = array();
echo "<li><strong>$line</strong> ?<br />";
if(preg_match_all($patternAB, $line, $matches, PREG_SET_ORDER)){
echo "Oui :<br /><pre>";
print_r($matches);
echo "</pre>";
}else{
echo "Non";
}
echo "</li>";
echo "</ul>"; |
Malheureusement ma fusion des 2 patterns initiaux n'est pas satisfaisante.
En effet voici le résultats que j'obtiens :
Code:
1 2 3 4 5 6 7 8 9
| Array
(
[0] => Array
(
[0] => 81.51.110.57 FR
[1] => FR
)
) |
Alors qu'à ce stade j'aimerai obtenir
Code:
1 2 3 4 5 6 7 8 9
| Array
(
[0] => Array
(
[0] => 81.51.110.57
[1] => FR
)
) |
Quelqu'un aurait-il une solution pour moi, car je ne m'en sort plus avec tous ces opérateurs :!: