Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/06/2006, 18h46   #1
Membre régulier
 
Inscription : décembre 2005
Messages : 177
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : décembre 2005
Messages : 177
Points : 85
Points : 85
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
Matth_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 19h51   #2
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
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 126
Points : 2 602
Points : 2 602
remplacement :
Code :
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é !!
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 20h03   #3
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
C'est possible avec une assertion arrière négative:

Motif de recherche:
Code :
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
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 20h53   #4
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
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 126
Points : 2 602
Points : 2 602
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.

Citation:
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.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 21h33   #5
Membre émérite
 
Inscription : mai 2004
Messages : 709
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 709
Points : 852
Points : 852
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
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 13h51   #6
Membre régulier
 
Inscription : décembre 2005
Messages : 177
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : décembre 2005
Messages : 177
Points : 85
Points : 85
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
Matth_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 13h53   #7
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
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 126
Points : 2 602
Points : 2 602
C'est bon pour moi, merci Matth_S
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h22.


 
 
 
 
Partenaires

Hébergement Web