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

Langage PHP Discussion :

expression réguliere - exclure un mot d'un pattern [RegEx]


Sujet :

Langage PHP

  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 expression réguliere - exclure un mot d'un pattern
    Bonjour,

    Est t'il possible d'exclure une sous-chaine dans le pattern d'une expression réguliere ? Je cherche en fait a ecrire une expression réguliere qui me permette de remplacer tous les chemins par des URL dans les tags liens et images d'un fichier HTML. En résumé je veux transformer :
    href="/images/mon_image.gif" en href="http://www.monsiteweb.com/images/mon_image.gif"

    J'ai reussi avec une seule expression réguliere a prendre en compte tous les cas : href='', href="", src='',src="" ; mais mon probleme est que dans mon fichier HTML il y a parfois des liens qui sont déjà sous la forme d'URL, et apres transformation via preg_replace, j'obtiens :
    href="http://www.monsiteweb.comhttp://www.monsiteweb.com
    J'ai recours a nouveau a preg_replace pour supprimer ces doublons.
    Pour coder de facon plus propre j'aimerais pouvoir faire les remplacements avec une seule expression réguliere et non pas deux. Donc je voudrais que mon pattern me permette d'exclure par exemple les chaines contenant "http" et c'est la que je bloque...comment je fais pour préciser que la sous-chaine http ne doit pas être présente ?

    Merci

  2. #2
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    remplacement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    href="http://monsite.com/$1"
    voila, mais ce n'est valable que si tu as toujours un / au début des liens que tu veux changer.

    sinon il faut que tu fasses un test sur $1, si il contient la chaine http, et le tour est joué !!

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    C'est possible avec une assertion arrière négative:

    Motif de recherche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    href="(?!http://)([^"]*)"
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  4. #4
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Whaa, merci ripat je connaissais pas du tout et c'est super bien, je suis donc allé chercher un peu de doc la dessus, et j'ai trouvé cela.

    Type Motif Résultat
    Assertion avant positive (?=motif) Vrai si le motif est vérifié
    Assertion avant negative (?!motif) Vrai si le motif échoue
    Assertion arrière positive (?<=motif) Vrai si le motif est vérifié
    Assertion arrière négative (?<!motif) Vrai si le motif échoue
    c'est donc plutot une assertion avant ? non ?
    et tu peux m'expliquer la différence entre avant et arrière ?
    Merci !!

    P.S : Matth_S mets pas tout de suite Résolu stp.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Dans ce cas on cherche à remplacer les occurrences qui ne comportent pas de http://

    Il te faut donc une assertion avant (on teste ce qui suit) et négative.

    Elles sont très pratiques et ont une caractéristique intéressante: elles ne "mangent" pas de caractère. Ce sont des marqueurs de position (entre deux caractères) tout comme les assertions simples \b ou les ancrages ^et $

    assertions simples:
    http://www.lumadis.be/regex/tuto_pcre.php#asser

    assertions avant-arrières:
    http://www.lumadis.be/regex/tuto_pcre.php#look

    Edit: J'écris une assertion avant et je parle d'une assertion arrière Faut que j'arrête de picoler ce soir....
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  6. #6
    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 vos réponses !
    @ripat : C'est exactement ce que je cherchais
    Merci pour l'info tu m'as également permis d'apprendre un truc !

    @Maxoo : Dis moi quand je peux basculer sur résolu

  7. #7
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    C'est bon pour moi, merci Matth_S

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

Discussions similaires

  1. [XL-2000] Expression réguliere construction pattern
    Par totoche dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/10/2009, 15h56
  2. [Debutant] Expression réguliere
    Par grizzz dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 17/08/2007, 16h14
  3. [RegEx] Couper un mot avec une expression réguliere ?
    Par mLk92 dans le forum Langage
    Réponses: 4
    Dernier message: 24/08/2006, 09h34
  4. expression réguliere en c++
    Par alambics dans le forum MFC
    Réponses: 9
    Dernier message: 10/03/2004, 20h19
  5. expression réguliere
    Par alambics dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/03/2004, 13h52

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