Bonjour,
je me heurte à une regex à écrire en Perl sur une ligne de log de téléchargement de fichier multimédia qui peut avoir ces 2 cas :
La 1ère ligne ne contient pas de champs referer et c'est donc un tiret qui est inscrit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 1.2.3.4 - 2018-11-03 00:06:35 GET /filename.mp3 queryparam 206 4870 - "AppleCoreMedia//1.0.0.16A404 (iPhone; U; CPU OS 12_0_1 like Mac OS X; fr_ca)" "1.2.3.4" 0.001 "bytes 0-65534/7254822" 1.2.3.4 - 2018-11-03 00:06:35 GET /filename.mp3 queryparam 200 4870 "http://lereferer.com" "AppleCoreMedia//1.0.0.16A404 (iPhone; U; CPU OS 12_0_1 like Mac OS X; fr_ca)" "1.2.3.4" 0.001 -
La 2nde ligne contient un referer mais ne contient pas la dernière valeur "bytes..." et c'est un tiret qui est inscrit.
Du coup, le Logger écrit un tiret lorsque la valeur est nulle et sinon encadre le champs par un double-guillemet.
Je me suis aidé du site https://regexr.com/ pour au final avoir ceci :
Mais cela ne matche pas cette condition qui dit "si le champs est un tiret ou alors qu'il est entouré par un double-guillemet" et je ne sais pas comment l'écrire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^(\S+) (\S+) (\S+) (\S+) (GET|POST) (.*?) (\S+) (\d+) (\d+) (\S+) (".*"|-) (\S+) (\S+) (\s+|-)
Est-ce que vous pourriez m'aider svp ?
Merci.
Partager