Discussion:
Expression rationnelle
(trop ancien pour répondre)
Jack\.R
2008-05-24 07:31:16 UTC
Permalink
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
Olivier Miakinen
2008-05-24 22:11:44 UTC
Permalink
Post by Jack\.R
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);
Post by Jack\.R
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
2008-05-25 10:19:18 UTC
Permalink
Le Sat, 24 May 2008 22:11:44 +0000, Olivier Miakinen a écrit:

[snip]
Post by Olivier Miakinen
Post by Jack\.R
Mes recherches sur un moteur de recherche avec négation expression
rationnelle ne m'ont pas menées bien loin.
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
Continuer la lecture sur narkive:
Loading...