Bonjour à tous,

Voici typiquement 2 lignes sur lesquels je dois appliquer ma fonction regex :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
$patternA = '/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/';
- pattern B : pour récupérer le code pays
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$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 : 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
//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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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