2011-01-26 5 views
3

Dans un fichier de configuration Apache, il y a une ligne pour éviter la compression gzip pour les images:Que signifie?: Signifie?

SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary 

Je ne crois pas qu'il puisse exister un nom de fichier .gif comme myfile.*:gif. Par conséquent, que signifie ?:?

Répondre

10

Cette partie spécifique (?:gif|jpe?g|png) est presque la même chose que (gif|jpe?g|png). La différence ici est que le premier ne «capture» pas le groupe entre parenthèses. En d'autres termes, lorsque vous regardez les correspondances, les données du premier exemple ne seront pas incluses dans un groupe spécial.

Normalement, lorsque vous mettez des éléments entre parenthèses, cela s'appelle un 'groupe de capture'. En d'autres termes, lorsque l'on regarde les résultats de la correspondance de l'expression rationnelle avec le texte, les éléments de la parenthèse seront placés dans un «groupe» pour être examinés plus tard. Lorsque vous utilisez (?:stuff), le contenu de la parenthèse est toujours regroupé dans la regex, mais il n'est pas considéré comme un groupe de capture.

Cela peut être utile si vous voulez faire correspondre le nom d'un groupe d'images, bot ne pas saisir plus que le nom de fichier:

"([^.]\.)(?:gif|png|tiff)" 

Lors correspondant à un fichier contre cette regex, seul le nom de fichier sera capturé . L'extension de fichier ne sera pas parce qu'elle ne fait pas partie d'un groupe de capture.

+0

+1 Je supprime ma réponse, car c'est une meilleure explication, juste en ajoutant le lien, pourrait être utile ... http://www.regular-expressions.info/brackets.html – Vojta

+1

@Vojita, I ' Je vous recommande de garder votre réponse. Ça ne fait pas de mal d'en avoir 2 bonnes. – jjnguy