IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[2.0][C#][Regex] Exécuter une fonction à l'interieur d'une expression régulière


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Décembre 2005
    Messages : 186
    Points : 133
    Points
    133
    Par défaut [2.0][C#][Regex] Exécuter une fonction à l'interieur d'une expression régulière
    Bonjour,

    J'ai dans un page ASP.NET une chaine de caractère qui contient le contenu d'une page. J'aimerais pouvoir remplacer tous les liens du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    href="/repertoire/mapage.asp?param1=1&param2=2"
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    href="http://www.monsite.com/mapage.aspx?page=repertoire/mapage.asp?param1=1&param2=2"
    (avec la partie apres le parametre page en URLEncode)

    Je voudrais donc savoir si je peux le faire simplement via une expression régulière, avec par exemple quelque chose du type (ca ne fonctionne pas bien sur, c'est juste pour montrer ce que je cherche a faire)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Regex.Replace(sourcePage,"href=""(.+)""","href=""http://www.monsite.com/test.aspx?page="&server.URLencode($1)&"""")
    A priori je ne pense pas que ca soit possible, je ne vois pas comment on peut executer une fonction dans une RegEx avant meme le retour de la fonction ; cela dit étant loin d'être un pro en RegEx je prefere demander a tout hasard, une solution du type serait carrement pratique.

  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Un thread similaire a été posté sur DVP :

    [C#] Expressions régulières

    Il y'en a d'autres.

    Mehdi Feki : Modérateur .Net

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Décembre 2005
    Messages : 186
    Points : 133
    Points
    133
    Par défaut
    Merci pour ta réponse ! je viens de lire le sujet que tu me conseilles mais je ne crois pas que ca correspondent tout a fait a ce que je souhaite faire (ou alors j'ai loupé un truc).

    Au fait j'avais bien effectué la recherche avant de poster, cela dit il y a environ 100 threads sur les expressions régulières sur developpez.net correspondant aux cas spécifiques de chacuns, j'en ai lu pas mal ne répondant pas a ma question et en affinant ma recherche il n'y avait pas de réponses...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 140
    Points
    140
    Par défaut
    Je pense que même si cela serait possible (je doute mais bon je ne suis pas non plus la réference absolue en expression régulière) ca ne serait pas la solution la plus adaptée.

    A mon avis un simple traitement de chaine devrait suffir pour pourvoir à ton besoin à moins que quelque chose m'ai echappé dans ton explication.

    Puisque tu connais la chaine / les chaines recherchée(s), de simple replaces feront amplement l'affaire et il n'est pas difficile de rendre le procédé un peu plus paramètrable (donc flexible) pour d'autre adaptation de référentiel interne de pages.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Décembre 2005
    Messages : 186
    Points : 133
    Points
    133
    Par défaut
    Merci aussi pour ta réponse ! Je pense aussi que c'est pas faisable mais ca aurait été une solution plus simple et rapide. En fait les Replace c'est ce que je faisais au début, mais je ne vois pas comment je peux traiter les suites de paramètres avec un replace, le replace va me permettre de convertir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    href="repertoire/mapage.asp?param1=1&param2=2"
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    href="http://www.monsite.com/repertoire/mapage.aspx?page=mapage.asp?param1=1&param2=2"
    le probleme c'est que param2 sera reconnu commme un parametre de mapage.aspx et j'aurais souhaité recuperer mapage.asp et tous les parametres qui s'y appliquent en 1 seule chaine (d'ou le besoin d'un URL encode)

    je pense avoir trouvé une solution mais je ne sais pas ce que ca vaut, en fait via une expression réguliere, je transforme mon lien en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    href="http://www.monsite.com/repertoire/mapage.aspx?page=[mapage.asp?param1=1&param2=2]"
    je crois qu'entre les [] les caractères & ne sont pas reconnus comme la fin du parametre ce qui me permet de recuperer "page" comme 1 seul parametre contenant tous les autres parametres de l'URL.

  6. #6
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par Matth_S
    Merci pour ta réponse ! je viens de lire le sujet que tu me conseilles mais je ne crois pas que ca correspondent tout a fait a ce que je souhaite faire (ou alors j'ai loupé un truc).
    Non je t'ai donné le bon lien, il faut juste jouer sur les parametres.
    On va dire que tu es un peu paresseux

    Bon voila tu dois faire un truc de ce genre :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string lines = "href=\"/repertoire/mapage.asp?param1=1&param2=2\"";
    string pat = (@"href=""/(?<repertoire>[\s\S]*)/(?<page>[\s\S]*)\?(?<param1>[\s\S]*)&(?<param2>[\s\S]*)""");
    Regex r = new Regex(pat,RegexOptions.Compiled);
    lines = r.Match(lines).Result("href=\"http://www.monsite.com/${page}?page=${repertoire}/${page}?${param1}&${param2}\"");

    ++
    Mehdi Feki : Modérateur .Net

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Décembre 2005
    Messages : 186
    Points : 133
    Points
    133
    Par défaut
    Merci pour ta réponse, je vais tester ce que tu m'indiques !

    Au fait, c'etait pas de la paresse, mais c'est juste que le code m'a pas sauté aux yeux comme pouvant s'appliquer dans mon cas (surtout que dans le premier post le créateur du sujet n'avait pas l'air de vouloir faire la même chose que moi), et ca m'a encore moins paru évident que je ne suis pas du tout habitué à l'utilisation des RegEx en .NET !

    Enfin, je vais approfondir suivant la piste que tu m'indiques, je pense donc que mon probleme est résolu. Merci pour le coup de main !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/05/2011, 12h48
  2. appel d'une fonction vb a partir d'une fonction javascript!
    Par labib23dz dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 03/07/2009, 11h04
  3. faire passer une fonction entant que parametre d'une fonction
    Par gali_fr dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/05/2008, 15h18
  4. Réponses: 6
    Dernier message: 08/12/2007, 14h33
  5. Réponses: 14
    Dernier message: 16/05/2006, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo