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 18/10/2006, 11h08   #1
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 43
Points : 18
Points : 18
Par défaut Regex : extraire les urls des tags [img]

Bonjour
J'ai besoin d'extraire les urls des tags [img][/img] et [img=width,height][/img] d'un textarea.

Pour ça, j'utilise ces deux lignes de code :

Citation:
preg_match('`\[img](.*?)\[/img]`si', $texte, $tab_img1);
et
Citation:
preg_match('`\[img=(.*?),(.*?)](.*?)\[/img]`si', $texte, $tab_img2);
qui me retournent un tableau avec l'url extraite.

Est ce qu'il est possible de passer par un seul preg_match pour faire mes deux recherches? Si oui, comment faire?

Merci d'avance pour votre aide
Thi0123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 11h21   #2
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 Thi0123
Est ce qu'il est possible de passer par un seul preg_match pour faire mes deux recherches? Si oui, comment faire?
Oui, l'alternative se fait à l'aide du métacaractère |.

Par contre, je pense qu'il manque l'option non gourmande (drapeau U) dans votre expression régulière et l'échappement des crochets fermants.

Une petite lecture : Initiation aux expressions régulières en PHP


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 11h55   #3
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 43
Points : 18
Points : 18
J'ai un problème avec le flag U, lorsque je l'ajoute:



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$texte = 
"
ffsdfdsfsdfsdsdfsd\n
[img]abc[/img]\n
fsdfsdlmkfsdlmkflmsdfsdlm\n
[img]123456[/img]
";
 
$masque = '`\[img](.*?)\[/img]`si';
preg_match($masque, $texte, $tab_image);
 
echo '<pre>';
print_r($tab_image);        
echo '</pre>';
?>
Au lieu de me retourner le premier tag [img], il me retourne le texte compris entre le premier [img] et le dernier

Ce qui donne
Citation:
Array
(
[0] => [img]abc[/img]

fsdfsdlmkfsdlmkflmsdfsdlm

[img]123456[/img]
[1] => abc[/img]

fsdfsdlmkfsdlmkflmsdfsdlm

[img]123456
)
Thi0123 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 12h12   #4
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
Je ne suis pas réveillé . Vous utilisiez déjà des expressions non avides .*? donc l'option non gourmande n'est pas nécessaire. Par contre, elle l'aurait été si vous aviez utilisé .* tout court.

Pour en revenir sur l'alternative, cela devrait nous donner quelque chose comme :
Code :
1
2
 
preg_match('`(?:\[img=(.*?),(.*?)]|\[img])(.*?)\[/img]`si', $texte, $tab_img);

Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 14h00   #5
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 43
Points : 18
Points : 18
Merci d'avoir regardé J'avais essayé avec le métacaractère | mais ça ne fonctionnait pas.
Je viens de tester ton bout de code et ça fonctionne, merci!
Thi0123 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 17h42.


 
 
 
 
Partenaires

Hébergement Web