Miroir du site http://www14.brinkster.com/proxomitron
[Copie du site en format ZIP: mirroir.zip]

logo titre

 
Accueil
Présentation
Pour commencer
      Télécharger/Installer
      Fenêtre Principale
      Fenêtre Config.
      Fenêtre Filtres HTML
      Fenêtre Filtres HTTP
      Fenêtre Log
      Fenêtre Proxy.
Travailler avec les filtres
      Introduction
      Editeur Filtres HTML
      Editeur Filtres HTTP
      Fenêtre Test
      Importer des filtres
      Trucs & Astuces
      Caractères Spéciaux
Détails
      Block List
      Filtre d'URL
      Commandes d'URL
      Comm. de recherche
      Conn. Sec.
      Proxies CGI
      Pile
Mise en œuvre
      JavaScript
      Exercices
      Aide mémoire (.pdf)
      Menus déroulants
FAQ
Version Beta
Misc
Liens
Fil d'infos (RSS)
 


La pile de remplacement
(commandes \# et \@)

 

Le Proxomitron supporte 10 variables de remplacement de \0 à \9 . Dans la plupart des cas, cela marche plutôt bien, mais occasionnellement il vous faudra quelque chose de plus. Comment faire par exemple pour capturer chaque élément d'un URL dans une variable différente. On peut par exemple utiliser ceci :

http://(*/)+.html

le (*/)+ attrapera chaque section de l'URL, mais comment les capturer chacune dans une variable différente ? C'est là que la pile de remplacement entre en oeuvre. Elle utilise le caractère \# qui, comme les variables \0 à \9, stocke la valeur rencontrée. Chaque fois que le nouveau meta caractère est appelé, il stocke la valeur rencontrée sur une "pile" qui peut contenir jusqu'à 100 éléments. Les éléments de la pile peuvent alors être utilisés dans le texte de remplacement, le premier rentré étant le premier sorti. Nous pouvons donc formuler une expression de recherche :
http://(\#/)+\#.html
qui donnera un texte de remplacement de la sorte :
\#\#\#\#\#\#\#
Il convertira ceci :
http://ceci/est/un/test/de/la/pile.html
en cela :
ceci est un test de la pile.html

Chaque itération de (...)+ pousse une valeur différente sur la pile, ensuite tout sera attrapé par le \# final. Comme les autre variables positionnables, les variables de pile peuvent être utilisées directement après les parenthèses pour capturer ce qu'il y a dedans. Par exemple :
http://(*/)\#+\#
produira
/ceci /est /un /test /de /la /pile.html

Le texte de remplacement reconnaîtra également un autre caractère spécial \@ . Il démonte la pile d'un coup dans l'ordre d'arrivé (il remplace le \#\#\#\#\#\#\#...). C'est probablement celui que vous utiliserez le plus souvent.

 

Quelques utilisations possibles

Il faut avoir en tête que le \# agit exactement comme les variables \1, \2, \3 à la différence près que chaque fois qu'il est sollicité, la valeur est stockée sur ce qu'il y avait déjà en variable au lieu de la remplacer. Voici quelques exemples :

  • Effacer les attributs d'un tag :
    Bounds :<cetag\s*>
    Match : (\#(attr1|attr2|attr3)=$AV(*))+\#
    Replace :\@

    Le premier \# attrape le texte jusqu'au premier attribut à enlevé (s'il y en a). L'itération suivante de la boucle attrape ce qu'il y a entre celle-ci et l'autre. Le dernier \# attrape tout ce qui se trouve à gauche du dernier attribut ou le tag entier s'il n'y a pas d'attribut.

  • Celui-ci garde seulement certains attributs (et supprime le reste)

    Bounds :<cetag\s*>
    Match : (*(attr1|attr2|attr3)=$AV(*))\#)+*
    Replace :\@

    C'est l'opposé du précédent, mais similaire. Il supprime tous les attributs sauf ceux que nous souhaitons conserver. Ici il n'y a qu'un \# qui capture chaque attribut et valeur.
  • Celui-ci remplace des attributs donnés par d'autres :

    Bounds :<cetag\s*>
    Match : (\#((attr1=)\#foo$SET(\#=bar)|
    ((attr2=)\#black$SET(\#=white)|((attr2=)\#one$SET(\#=zero)))+\#

    Replace :\@

    Celui-ci est plus complexe : il cherche un des attribut qu'il doit trouver, quand il le trouve, il le place sur la pile et la essaye d'attraper la valeur, s'il trouve celle qu'il cherche, il utilise $SET pour pousser une autre valeur à la place. En complément, il capture et préserve tout ce qui n'est pas à attraper. Vous pouvez même remplacer tous les attributs en appelant une liste de la sorte :

    (\#$LST(AttributsDeRemplacement))+\#

    Avec une liste d'éléments de la sorte :

    #
    # Exemple de liste de remplacement des attributs
    #
    (attr1=)\#foo$SET(\#=bar)
    (attr2=)\#black$SET(\#=white)
    (attr3=)\#one $SET(\#=zero)

    ou même

    attr1=foo $SET(\#=foo=bar)
    attr2=foo $SET(\#=black=white)
    attr3=foo $SET(\#=one=zero)

    pour remplacer sélectivement à la fois l'attribut et sa valeur par quelque chose d'autre. (Actuellement c'est même meilleur parce que les éléments son hashables dans la liste et traités plus rapidement).

     

    Pour finir, l'exemple d'un filtre qui capture tous les URLs contenant foo ou bar d'une page quelconque :

    Name = Supprime tout sauf les liens
    Active = TRUE
    Bounds = <(a\s*</a>|)|[^<]+
    Limit = 2048
    Match = (<a\s*>*(foo|bar)*</a>)\#$SET(\#=<br>)|*
    Replace = \@
         


    The Proxomitron is Copyrighted to Scott R. Lemmon