Bonjour à tous,
Voici typiquement 2 lignes sur lesquels je dois appliquer ma fonction regex :
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).
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
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
- pattern B : pour récupérer le code pays
Code : Sélectionner tout - Visualiser dans une fenêtre à part $patternA = '/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $patternB = '/\b(BE|DE|CH|AT|FR)\b/';
Ci-dessous un exemple que j'ai testé, inspiré du cours de Guillaume sur les regex:
Malheureusement ma fusion des 2 patterns initiaux n'est pas satisfaisante.
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>";
En effet voici le résultats que j'obtiens :
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 FR [1] => FR ) )
Quelqu'un aurait-il une solution pour moi, car je ne m'en sort plus avec tous ces opérateurs
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 ) )![]()
Partager