Expression rationnelle

Le
Jack\.R
Bonjour,

J'ai une chaîne de caractères qui contient du HTML. Dans cette chaîne, je
souhaite modifier le chemin des images. Pour ce faire, je suis parti sur
preg_replace afin de remplacer tous les src="une_image" par
src="un_chemin_une_image". Là où cela se complique, c'est que je ne veux
pas modifier les src="/une_image" ou les src="http://truc.com/une_image"

Mes recherches sur un moteur de recherche avec négation expression
rationnelle ne m'ont pas menées bien loin.

Je dois probablement mal m'y prendre pour construire cette expression.

Avez-vous des pistes, tutoriel ou autre à m'indiquer ?

Merci

--
Jack.R
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #6700901

J'ai une chaîne de caractères qui contient du HTML. Dans cette chaîne, je
souhaite modifier le chemin des images. Pour ce faire, je suis parti sur
preg_replace afin de remplacer tous les src="une_image" par
src="un_chemin_une_image". Là où cela se complique, c'est que je ne veux
pas modifier les src="/une_image" ou les src="http://truc.com/une_image"


Tu peux utiliser les assertions négatives. Ce ne serait pas utile pour
tester juste que le chemin ne commence pas pas un « / », mais pour le
cas de « http:// » c'est quand même plus simple.

Tester que le caractère suivant n'est pas un / :
(?!/)

Tester que la chaîne suivante n'est pas http:// :
(?!http://)

Donc :

preg_replace(
'|(src=")(?!/)(?!http://)(.*")|U',
'$1un_chemin_$2', $code_source);

Voire, tout simplement :

preg_replace(
'|(src=")(?!/)(?!http://)|',
'$1un_chemin_', $code_source);

Et même, en utilisant une assertion arrière :

preg_replace(
'|(?<=src=")(?!/)(?!http://)|',
'un_chemin_', $code_source);

Mes recherches sur un moteur de recherche avec négation expression
rationnelle ne m'ont pas menées bien loin.


Le mot-clé est « assertion » :
http://fr.php.net/manual/fr/regexp.reference.php#regexp.reference.assertions

Jack\.R
Le #6702491
Le Sat, 24 May 2008 22:11:44 +0000, Olivier Miakinen a écrit:

[snip]
Mes recherches sur un moteur de recherche avec négation expression
rationnelle ne m'ont pas menées bien loin.


Le mot-clé est « assertion » :
http://fr.php.net/manual/fr/regexp.reference.php#regexp.reference.assertions


Merci beaucoup pour ces exemples, le paragraphe correspondant.
Maintenant que j'ai le bon mot clé cela devrait aller.

--
Jack.R


Publicité
Poster une réponse
Anonyme