utilisation de preg_match

[Résolu]
Signaler
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
bonjour,
voila j'ai 4 type de phrases (pour l'instant) et je veux en extraire le morceau compris entre // et //

1- $phrase = "salut visiteur //act_001.gif//";
2- $phrase = "salut visiteur //act_001.gif// coucou ca va ? ";
3- $phrase = "//act_001.gif// coucou ca va ? ";
4- $phrase = "//act_001.gif//";

j'utilise ceci :
preg_match("/^(\/\/)?([^\/\/]+)/i", $phrase, $matches);

$var = $matches[2];

normalement $var = act_001.gif
mais cela ne fonctionne que pour la 3° et la 4° type de phrase, si je mets du texte avant (1° et 2°) ca ne fonctionne pas !

A l'aide ??


joebuz

12 réponses

Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
preg_replace('`//(.+?)//`sim','',$chaine);

ça devrait fonctionner.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,

enlève le ^ qui signifie "début de la chaîne" dans ton preg_match :-)

a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

ah ok merci !!


joebuz
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

c bon ca marche mais je l'ai modifie comme ca :

preg_match("/(\/\/)([a-z0-9_\.]{1,})([\/\/]+)/i",

par contre si j'ai plusieurs fois : //act_001// dans la meme phrase il ne m'affiche que le premier !!

comment faire pour tous les extraire ?

PS : si vous connaissez une adresse ou l'on explique bien preg_match ca me serais utile, parce que dans le manuel PHP il n'explique pas toute la syntaxe comme ^ ou /i


joebuz
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
preg_match_all() dans ce cas là pour les avoir tous (fr.php.net)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

ok, merci ca fonctionne. exemple :

$a = "//act_001// salut visiteur //act_025// coucou ca va ? ";

preg_match_all("/(\/\/)([a-z0-9_\.]{1,})([\/\/]+)/i",
$a, $matches);

$matches[2][0] --> act_001
$matches[2][1] --> act_025

Mais en fait (desole d'etre chiant, mais c'est comme ca qu'on apprends !) c'est pas réellement ce que je chercha a faire !!!

en fait il faudrait que je remplace tout ces elements par autre chose ex :

$a = "//act_001// salut visiteur //act_025// coucou ca va ? ";
deviendrait
$a = " salut visiteur coucou ca va ? ";

Pour ca j'ai été voir dans le manuel PHP et j'ai trouvé ceci :

preg_replace

et j'en ai fait ceci :

$patterns = array ("/(\/\/)([a-z0-9_\.]{1,})([\/\/]+)/i", $a);
$replace = ('coucou pour essai');
$b = preg_replace($patterns, $replace, $a);
echo $b;

Mais bien sur ca ne marche pas !!


joebuz
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

ouah, merci trop cool , ca marche trop trop bien !!!!

MERCI !!!!!!!!!!!!!!!

par contre j'aimerais bien que tu m'explique quand meme !
a quoi ca correspond
--> (.+?)
--> sim
--> $1


joebuz
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
. c'est "n'importe quel caractère"
+ c'est "un ou plusieurs"
et ? c'est "un ou aucun"

ensuite i c'est pour la casse c'est insensible à la casse, s et m faudrait que je vérifie, c'est pas obligatoire (le reste non plus d'ailleurs).

pour le $1 c'est la condition qui satisfait la première parenthèse capturante.

a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

ok merci,
si j'ai bien compris
//(.+?)// signifie "un ou plusieurs ou aucun n'importe quel caractere compris entre // et // , c'est ca ?, si oui ca sert a rien alors de mettre ? puisqu'il n'y aura jamais aucun charactere entre // et //, non ?

et sinon pour le i j'ai pas tout compris


joebuz
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
"puisqu'il n'y aura jamais aucun charactere entre // et //, non ?"

en théorie oui ;-)

"et sinon pour le i j'ai pas tout compris"

en fait ici il ne sert à rien car // en minuscules et majuscules c'est pareil, le i signifie que ça ignore la casse, ça veut dire que si tu mets


preg_replace('`BLABLA`sim','',$chaine);

bah BLABLA sera remplacé mais aussi blabla

sans le i seul BLABLA serait pris en compte :-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

ok et merci bcp de ton aide, dernier pitite chose si tu connais une url ou il explique tout les differents symbole je veux bien, merci
@+


joebuz
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
heu www.expreg.com de tête il me semble que c'est ça.

a +

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>