Je suis en train de définir des objectifs dans Google Analytics et je pourrais utiliser un peu d'aide regex.
Disons que j'ai 4 URL
http://www.anydotcom.com/test/search.cfm?metric=blah&selector=size&value=1
http://www.anydotcom.com/test/search.cfm?metric=blah2&selector=style&value=1
http://www.anydotcom.com/test/search.cfm?metric=blah3&selector=size&value=1
http://www.anydotcom.com/test/details.cfm?metric=blah&selector=size&value=1
Je veux créer une expression qui identifiera toute URL contenant la chaîne sélecteur = taille mais ne contient PAS details.cfm
Je sais que pour trouver une chaîne qui ne contient PAS une autre chaîne, je peux utiliser cette expression:
(^((?!details.cfm).)*$)
Mais, je ne suis pas sûr de savoir comment ajouter la portion sélecteur = taille.
Toute aide serait grandement appréciée!
Cela devrait le faire:
^(?!.*details\.cfm).*selector=size.*$
^.*selector=size.*$
devrait être assez clair. Le premier bit, (?!.*details.cfm)
est une image négative: avant de faire correspondre la chaîne, elle vérifie que la chaîne ne contient pas "details.cfm" (avec un nombre quelconque de caractères avant celle-ci).
regex pourrait être (syntaxe Perl):
`/^[(^(?!.*details\.cfm).*selector=size.*)|(selector=size.*^(?!.*details\.cfm).*)]$/`
^(?=.*selector=size)(?:(?!details\.cfm).)+$
Si votre moteur regex prend en charge les quantificateurs posessifs (bien que je soupçonne que Google Analytics ne le fasse pas), je suppose que cela fonctionnera mieux pour les grands ensembles d'entrées:
^[^?]*+(?<!details\.cfm).*?selector=size.*$
Je cherchais un moyen d'éviter - une ligne tamponnée sur une queue dans une situation similaire à celle de l'OP et la solution de Kobi me convenait parfaitement. Dans mon cas, exclure les lignes avec "bot" ou "spider" tout en incluant "/" (pour mon document racine).
Ma commande d'origine:
tail -f mylogfile | grep --line-buffered -v 'bot\|spider' | grep ' / '
Devient maintenant (avec "-P" le commutateur Perl):
tail -f mylogfile | grep -P '^(?!.*(bot|spider)).*\s\/\s.*$'