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 09/06/2008, 17h24   #1
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 98
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 98
Points : 34
Points : 34
Par défaut preg_replace pour désactivation de lien

Bonjour

J'essaye de désactiver(supprimer) des liens avec preg_replace :

Code :
<a href="cible.html" target="_top">blablabla</a>
doit devenir


Voilà la tête de ma regex, qui n'a pas l'air d'être bonne :

Code :
$contenu = preg_replace("~<a href=\"".$lien.".html\">([[:graph:]]{1,})</a>~", '$1', $contenu) ;
olbouss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2008, 18h05   #2
Nouveau Membre du Club
 
Homme Pascal Sandrez
Ingénieur développement matériel électronique
Inscription : janvier 2005
Messages : 101
Détails du profil
Informations personnelles :
Nom : Homme Pascal Sandrez
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement matériel électronique

Informations forums :
Inscription : janvier 2005
Messages : 101
Points : 34
Points : 34
J'essaierais ça :
Code :
$contenu = preg_replace("~<a[^>]*>([^<]+)</a>~i", '$1', $contenu) ;
__________________
Pascal Sandrez
Delphy113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 09h22   #3
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 98
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 98
Points : 34
Points : 34
oui, mais je ne veux remplacer que les liens dont la destination est $lien !
olbouss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 09h33   #4
Inactif
 
Inscription : mai 2008
Messages : 179
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 179
Points : 179
Points : 179
http://simplehtmldom.sourceforge.net/
sielfried est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 09h48   #5
Nouveau Membre du Club
 
Homme Pascal Sandrez
Ingénieur développement matériel électronique
Inscription : janvier 2005
Messages : 101
Détails du profil
Informations personnelles :
Nom : Homme Pascal Sandrez
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement matériel électronique

Informations forums :
Inscription : janvier 2005
Messages : 101
Points : 34
Points : 34
ah dans ce cas:
Code :
$contenu = preg_replace('~<a href="'.$lien.'"([^<]*)>([^<]+)</a>~i', '$1', $contenu) ;
__________________
Pascal Sandrez
Delphy113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2008, 11h33   #6
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 98
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 98
Points : 34
Points : 34
Désolé ça ne marche pas. Le script ne remplace rien du tout.

Voilà à quoi ressemblent les liens :

Code :
<a href="101000.html"><img src="../medias/b.gif" border="0"></a>
ou
Code :
<a href="101222.html">blablabla</a>

Le script récupère l'ensemble des liens dans $contenu puis vérifie leur validité (fontion rubrique_client). S'il est non valide, il doit le supprimer avec un preg_replace en concervant le texte ou l'image :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
preg_match_all("~([[:digit:]]{1,10}).html~", $contenu, $matches, PREG_OFFSET_CAPTURE) ;
 
for ( $i = 0 ; $i < count($matches[0]) ; $i++ ) {
 
	$lien = $matches[0][$i][0] ;
	$rub = substr($lien,0,3) ;
	if ( !rubrique_client($rub,$idClient ) ) {
		//echo $lien."<br />" ;
		$contenu = preg_replace('~<a href="'.$lien.'"([^<]*)>([^<]+)</a>~i', '$1', $contenu) ;
		//$contenu = preg_replace('~<a href="'.$lien.'"([[:graph:]]{1,})>([[:graph:]]{1,})</a>~', '$1', $contenu) ;
	}
}
Ce qui est récupéré dans $lien est bien de la forme "101000.html".

Merci si vous avez une idée.
olbouss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2008, 10h40   #7
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 98
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 98
Points : 34
Points : 34
En fait cela fonctionne bien si la balise <a> n'enferme que du texte.
Mais si on y trouve d'autres balises (<br />, <span> ou <img>) cela ne fonctionne pas.

Comment modifier la regex ?

Code :
$contenu = preg_replace('~<a href="'.$lien.'"([^<]*)>([^<]+)</a>~i', '$2', $contenu) ;
En fait comment écrire dans la deuxième parenthèse, tout sauf </a> ?
olbouss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2008, 20h51   #8
Inactif
 
Inscription : mai 2008
Messages : 179
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 179
Points : 179
Points : 179
Les regexp ne sont pas faîtes pour ça, y aura toujours des cas foireux.

Le lien que je te donne au dessus te permet de t'en sortir de façon clean, avec un outil qui existe pour ça (DOM).
sielfried est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h28.


 
 
 
 
Partenaires

Hébergement Web