Re: Regexp multiline

Top Page

Reply to this message
Author: Raphaël Jamet
Date:  
To: guilde
Subject: Re: Regexp multiline
On 13/03/2012 13:55, Dominique Fournier wrote:
>
>>> Merci
>>>
>>> Dom
>>>
>> Bonjour,
>>
>> Je connais pas tellement le multiligne, mais les "^pf" me semblent
>> curieux : dans l'exemple, tu n'as aucune ligne commençant par "pf". Peut
>> être plutôt '#^.+pf' au début, et idem pour la seconde ligne (
>> "(\n|.)+^pf:.+$" -> ".+\n.+pf:.+$") ?
>>
>> Raphaël
>>
>
> Désolé. J'ai copié un peu vite les logs. Mon programme supprime tous
> les en-têtes, ce qui fait que les lignes commencent au niveau de 'pf:'
> pf: 00:00:06.056065 rule 1/0(match): block in on em2_vlan555: (tos
> 0xc0, ttl 1, id 13453, offset 0, flags , proto IGMP (2), length 32,
> options (RA))
> pf:     147.173.1.252 > 224.0.0.1: igmp query v2
> pf: 00:00:18.518340 rule 25/0(match): pass out on em2_vlan22: (tos
> 0x0, ttl 114, id 19117, offset 0, flags , proto TCP (6), length 52)
> pf:     95.65.77.162.17295 > 147.173.21.185.445: Flags , cksum 0x202a
> (correct), seq 2737369133, win 8192, options [mss 1460,nop,wscale
> 2,nop,nop,sackOK], length 0

>
> Désolé pour le contre-temps...
>
> Dom

Alors ok pour les "^pf" du coup (ca semblait trop simple), mais je
dirais que le "(\n|.)+" est dangereux : à vue de nez, ca va matcher
absolument tout ton document jusqu'au dernier "^pf.+$". Essaie de le
remplacer par ".+\npf.+$" ? Ca donnerait ca :

preg_grep ('#^pf: .+\(match\): pass (out|in) on .+\npf:.+$#sm', $logs,
PREG_GREP_INVERT);

Raphael