[Perl] problème mise au point regexp

Eric DUVAL eduval at ligfy.fr
Dim 26 Mar 23:56:46 CEST 2017


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.
>


Plus d'informations sur la liste de diffusion Perl