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 28/09/2006, 20h50   #1
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
Par défaut Constitution d'un masque pour un lien

Code :
1
2
3
4
5
<?
$a ="<a>uuuioii</a>";
$a = eregi_replace('(^<a>.*</a>$)', '', $texte);
echo $a;
?>
Comment faire pour récuperer ce qu'il y a entre deux choses definies ? La par exemple entre <a></a>
En passant ou sont les tutos REGEX ?

Merci
__________________
Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2006, 21h02   #2
Membre du Club
 
Inscription : septembre 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 69
Points : 58
Points : 58
Salut,

Il faut utiliser des masques de capture.
Essaye ça :
Code :
1
2
3
4
5
<?php
$a ="<A>uuuioii</a>";
$a = preg_replace('/((?i)<a>)(.*)((?i)<\/a>)/', "$2", $a);
echo $a;
?>
Avec preg_replace, l'option (?i) précise de ne pas tenir compte de la casse.
Et le slash / étant un caractère spécial, il faut l'échapper.
Enfin, pas besoin de préciser que la chaine commence et termine par ceci ou cela, l'essentiel est de récupérer le deuxième masque.

Docs sur les regex :
- http://www.phpinfo.net/page/archives/regex/
- http://www.phpinfo.net/page/archives...gulieres-perl/
- http://fr.php.net/manual/fr/referenc...ern.syntax.php

P.S. : je préfère utiliser preg_replace, il parait qu'elle est plus performante...
PseudoCoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2006, 22h45   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par Elwyn
En passant ou sont les tutos REGEX ?
On peut citer celui-ci Les expressions régulières mais je doute que ce soit le seul sur dvp.

Citation:
Envoyé par PseudoCoder
Et le slash / étant un caractère spécial, il faut l'échapper.
En choisissant judicieusement le délimiteur de l'expression vous ne seriez pas obligés de l'échapper. Exemple :
Code :
1
2
3
4
<?php
$texte ="<A>uuuioii</a>";
echo preg_replace('£<a>(.*)</a>£iU', "$2", $texte);
?>
Le flag i (placé après le délimiteur, ici £) indique que la "recherche" est insensible à la casse (majuscules/minuscules) et U que l'expression est non gourmande (un texte tel que <a>1</a><a>2</a> vous donnera 1 et 2 avec cette option). Il est conseillé de privilégier la fonction preg_replace à ereg(i)_replace.


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2006, 22h48   #4
Membre expérimenté
 
Inscription : octobre 2004
Messages : 872
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 872
Points : 582
Points : 582
Dans ton cas precis tu peut aussi essayé DOM
jeff_! est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2006, 22h53   #5
Membre du Club
 
Inscription : septembre 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 69
Points : 58
Points : 58
Merci julp pour les infos.
Je suis lin d'être un expert en regex... très loin... Je voulais juste donner un code qui fonctionne, pour avoir été confronté il y a peu à un problème similaire... Merci pour les précisions donc, qui permettent un code optimisé

J'en profite pour une petite question... Dans l'exemple donné, le délimiteur qui est défini comme étant £... Comment est-il défini justement... ? Simplement du fait qu'il est utilisé à cet endroit de l'expression ?
PseudoCoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2006, 10h47   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par PseudoCoder
Comment est-il défini justement... ? Simplement du fait qu'il est utilisé à cet endroit de l'expression ?
Oui, lol. C'est le premier caractère de l'expression régulière et il cherchera le même vers la fin d'expression (vers car il peut y avoir présence de flags : s, m, i, e, U, ...). On peut également utiliser d'autres délimiteurs notamment ceux qui ont la particularité d'être ouvrants/fermants (exemple : < et > dans preg_replace('<chat>i', 'chien', 'mon chat s'appelle Rex')) mais ils sont souvent un mauvais choix car ils figurent généralement dans l'expression régulière.


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2006, 18h15   #7
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
Euh comprend plus la ! Expliquez moi la requete permettant de prendre qu'une partie d'une chaine Pas de la remplacer de la prendre juste Et pouvez vous m'expliquer pas à pas le deroulement de la requete

Merci
__________________
Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2006, 23h02   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Code :
1
2
3
4
5
6
7
8
 
<?php
$texte ="<a>lien1</a><a>lien2</a>";
preg_match_all('£<a>(.*)</a>£iU', $texte, $m);
foreach ($m[1] as $v) {
	echo $v . '<br/>';
}
?>
preg_match_all va chercher toutes les parties de la chaîne qui correspondent au motif donné et va placer les résultats sous forme de tableau dans la variable $m. Toutefois, ce tableau est multidimensionnel car le premier indice (numéroté 1) donne l'ensemble des chaînes correspondant à la première parenthèse capturante sous forme d'un tableau et ainsi de suite (utilisez print_r($m) pour visualiser la chose). C'est pourquoi, je le parcours ici avec foreach pour afficher tous les "liens" qui figurent dans la chaîne de départ.


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2006, 13h00   #9
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
Merci !
__________________
Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
Elwyn 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 12h34.


 
 
 
 
Partenaires

Hébergement Web