[Perl] problème mise au point regexp

Eric DUVAL eduval at ligfy.fr
Lun 27 Mar 19:39:32 CEST 2017


Bonjour,

Je sors un peu du contexte purement perl, j'en suis désolé, perl est mon 
ami pour la mise au point de cette regexp par contre le moteur pcre de 
syslog-ng ne l'a pas été! ;-)

Le moteur PCRE dans syslog-ng ne réagit de la même façon que PERL.
Du coup impossible de mettre au point correctement la règle.
Je l'ai transformé, pour le moteur pcre du syslog-ng en:

"(\] \")*?[\?][^\"]*\" "

Je reconnais le début et la fin de l’occurrence formant les paramètres GET
...bla bla] "/uri" blabla..
...bla bla] "/uri?var=val" blabla..
...bla bla] "/uri?var=val&var1=val1" blabla..

Et ressort en anonymisation:
...bla bla] "/uri" blabla..
...bla bla] "/uri" blabla..
...bla bla] "/uri" blabla..

Ce qui me permet de supprimer la totalité des paramètres de l'URI
en utilisant la fonction subst() utilisable dans des rewrite( ) syslog-ng.

Je n'ai pas dit mon dernier mot, prochaine étape obtenir le résultat qui 
fonctionne avec la regexp (perl) proposée par Yon.

I will come back :-)

Encore merci pour l'aide.

Eric

Le 26/03/2017 à 23:56, Eric DUVAL a écrit :
> Bonjour Yon,
>
> ça à l'air de fonctionner, merci :-)
> Demain je testerai sur un plus grand jeu de données.
> C'est une règle que je vais injecter dans une conf de syslog-ng.
> Je ne peux pas utiliser de module perl, juste la regexp.
> Je reviendrai sur cette liste indiquer si tout est ok.
>
> Encore merci
>
> Eric.
>
> Le 26/03/2017 à 22:39, Yon a écrit :
>> Bonjour,
>>
>> On Sun, Mar 26, 2017 at 10:15:44PM +0200, Eric DUVAL wrote:
>>> Bonjour,
>>>
>>> Je dois anonymiser un fichier contenant des lignes de la forme:
>>> (STRING == je ne peux pas transmettre les vraies données)
>>> Aucune des lignes ne se ressemblent. Cette ligne est donnée à titre
>>> d'exemple.
>>> Le nombre de var=value peut varier de 0 à n.
>>>
>>> file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - -
>>> [21/Mar/2017:19:19:57
>>> +0100] "/uri?var1=value1&var2=value2&var3=value3" 200
>>> 0.037-0.033=0.004 POST
>>> 484 - "STRING4" "STRING5" "STRING6"
>>>
>>> Et ressortir avec des lignes de la forme:
>>>
>>> file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - -
>>> [21/Mar/2017:19:19:57
>>> +0100] "/uri?var1=xxx&var2=xxx&var3=xxx" 200 0.037-0.033=0.004 POST
>>> 484 -
>>> "STRING4" "STRING5" "STRING6"
>>>
>>> ou de la forme
>>>
>>> file.log:Mar 21 19:19:57 STRING1 STRING2 "STRING3" - -
>>> [21/Mar/2017:19:19:57
>>> +0100] "/uri" 200 0.037-0.033=0.004 POST 484 - "STRING4" "STRING5"
>>> "STRING6"
>>>
>>> Après de multiples tentatives, je n'arrive à mettre au point
>>> l'expression
>>> régulière qui va bien :-(
>>>
>>> Le code perl est de la forme:
>>> (J'ai séparé les expressions pour la clarté de l'exemple)
>>>
>>> [...]
>>> while( <in> ) {
>>>     s/(\?.*)=.*([&\"])/${1}=xxx${2}/;
>>>         s/(&.*)=.*([&\"])/${1}=xxx${2}/;
>>> }
>>> [...]
>>>
>>> J'ai essayé des expressions plus ou moins complexes mais sans résultats.
>> Un truc vite-fait, si j'ai bien compris:
>>
>>     s{(?<=[?&]) ([^?&=]+) = ([^&"]+) (?=["&])}{$1=xxx}xg;
>>
>> Après, peut-être que ça vaut le coup d'extraire juste l'url, et
>> d'utiliser par exemple le module URI avec un $uri->queryform, puis après
>> reconstruire une nouvelle url.
>>
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl


Plus d'informations sur la liste de diffusion Perl